Django - admin 的設定筆記
Django 內建 admin 的設定筆記
→ 在某個資料表陳列頁面訂定顯示的欄位。
假設你想要自訂User的呈現資訊,那就得要使用BaseUserAdmin去創建新的UserAdmin。
要顯示那些欄位就必須透過 list_display 設定,賦予的資料必須是一個tuple,裡面就是每個欄位的名稱。
除了models內設定欄外名稱之外,也可以自己命名,然後在下面建立一個跟欄位名稱一樣的function並回傳你想要的內容,這樣就可以更客製化一點了!
class UserAdmin(BaseUserAdmin):
list_display = ('pk', 'full_name', '生日')
# pk 就是 pk
def full_name(self, obj):
return obj.get_full_name()
def 生日(self, obj):
return obj.birthday.__format__('%Y-%m-%d')
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
** 因為Django已經註冊了User,所以要先把User取消註冊,再註冊新的UserAdmin。→ 外鍵在新增/修改時會以選單的方式供選擇,要如何變更選項內容?
class NewsAdmin(admin.ModelAdmin):
def formfield_for_foreignKey(self, db_field, request, **kwargs):
if db_field.name == 'author':
# 選定的欄位
return AuthorChoiceField(queryset=User.object.all())
class AuthorChoiceField(forms.ModelChoiceField):
def label_form_instance(self, obj):
return obj.get_full_name()
→ ManyToMany的多選欄位也跟上面的方式一樣。
class NewsAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
# 只是這裡使用 formfield_for_manytomany
if db_field.name == 'author':
return AuthorChoiceField(queryset=User.object.all())
class AuthorChoiceField(forms.ModelChoiceField):
def label_form_instance(self, obj):
return obj.get_full_name()
留言
張貼留言