Django admin是為管理員設計的,而不是最終用戶。Django admin的存在是為了方便管理員添加、修改和刪除數據以及管理站點任務。
2.列表顯示
如上圖,因為默認顯示的模型文本是xxx對象,所以在管理員列表頁面中也默認顯示xxx對象。如果想顯示更多有用的信息,我們可以進行如下設置:
為模型編寫__unicode__()方法。
如果希望model在列表頁面中顯示更多的項目,需要使用list_display。
__unicode()__示例:
# models.py
從django.db導入模型
類文章(模型。型號):
標題=模型。CharField(max_length=100)
slug =模型。CharField(max_length=100)
內容=模型。文本字段()
is_published = models。BooleanField(默認值=False)
def __unicode__(self):
返回自我標題
#管理. py
來自django.contrib導入管理
從。模型導入文章
管理員網站註冊(文章)
結果:
如果要顯示其他項目:
#管理. py
來自django.contrib導入管理
從。模型導入文章
類ArticleAdmin(admin。ModelAdmin):
list_display = ('title ',' is_published ')
admin.site.register(文章
結果:
3.為ModelAdmin添加操作。
我們可以向ModelAdmin添加方法或函數,使管理界面更適合我們的需要。
比如我們想在管理界面顯示壹個顯式的url,但是當我們在模型中定義get_absolute_url()方法的時候,django admin給了我們壹個與我們默認想要的URL完全不同的URL。所以我們可以通過以下方法定義URL:
#管理. py
來自django.contrib導入管理
從django.core.urlresolvers反向導入
從django.utils.html導入格式_html
從。模型導入文章
類ArticleAdmin(admin。ModelAdmin):
list_display = ('title ',' is_published ',)
readonly_fields = ('show_url ',)
def show_url(自身,實例):
url = reverse('article_detail ',kwargs={'pl': instance.pk})
response = format_html(" " " " ",url)
返回響應
Show_url.short_description = u "文章預覽"
#顯示HTML標簽
#不要為用戶提交的數據設置此項!
show_url.allow_tags = True
註意,allow_tags屬性的默認值為False,如果誤用會帶來安全風險。如果它被設置為真,
HTML標簽允許在管理中顯示。所以我們使用的原則是,對於用戶輸入的信息,永遠不要設置allow_tags=True。
Allow_tags=True只能在其內容由系統生成且用戶無法修改時使用。
4.不要在多用戶編輯環境中使用list_editable。
Django admin為我們提供了在列表頁面修改模型屬性的功能,方便管理員壹次修改多個屬性。如果只有壹個管理員,
這沒問題,但是在多用戶環境下,會有壹個嚴重的潛在問題,因為列表頁面提交的修改信息記錄的是位置,而不是模型的主鍵。
例如,默認情況下,文章列表頁面根據創建順序以相反的順序排列。用戶A打開文章列表頁面並開始修改它。同時,用戶B添加了壹篇新文章。這時,
當用戶A提交修改時,後續的文章信息會出現錯誤。