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()





留言

這個網誌中的熱門文章

[Python] 以folium製作臺灣百岳資訊地圖

交個筆友吧!老派的浪漫與科技之結合 - SLOWLY