Django批量向admin注冊模型方法詳解
大量模型需要注冊到 admin 頁面
如果有大量模型需要注冊到 admin 頁面, 手工一個(gè)個(gè)復(fù)制粘貼,然后修改名稱, 還挺麻煩. 有沒有自動化途經(jīng)呢?
一個(gè)最直觀的做法如下:
from django.apps import apps models = apps.get_models() for model in models: admin.site.register(model)
的確能夠完成目標(biāo), 但存在一個(gè)缺陷. 如果有些模型已經(jīng)被注冊過了, 那么程序?qū)伋霎惓? 因?yàn)槟P筒荒苤貜?fù)注冊.
所以, 可以做個(gè)異常處理, 如果已經(jīng)注冊, 那就 pass.
from django.apps import apps models = apps.get_models() for model in models: try: admin.site.register(model) except admin.sites.AlreadyRegistered: pass
這里要注意, 上述代碼必須放在所有 admin 注冊行為之后運(yùn)行.
如果, 我們想讓注冊后的 admin 列表頁自動顯示所有字段, 那該如何修改上述代碼呢?
我們可以利用 admin.register(model_or_iterable, admin_class=None)
方法的第二個(gè)參數(shù) admin_class
, 來實(shí)現(xiàn)這一行為.
list_display 的動態(tài)獲取
通過構(gòu)造 mixin 類 ListAdminMixin
, 實(shí)現(xiàn) list_display 的動態(tài)獲取:
from django.apps import apps from django.contrib import admin class ListAdminMixin(object): def __init__(self, model, admin_site): self.list_display = [field.name for field in model._meta.fields] super(ListAdminMixin, self).__init__(model, admin_site) models = apps.get_models() for model in models: admin_class = type('AdminClass', (ListAdminMixin,admin.ModelAdmin), {}) try: admin.site.register(model, admin_class) except admin.sites.AlreadyRegistered: pass
這樣就實(shí)現(xiàn)了預(yù)期的功能.
以上就是Django批量向admin注冊模型方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Django批量向admin注冊模型的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?Generator生成器函數(shù)基本概念及高級用途技巧示例
這篇文章主要為大家介紹了Python?Generator生成器函數(shù)基本概念及高級用途技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Python+Mysql實(shí)現(xiàn)登錄注冊完整代碼示例
在開發(fā)中用戶注冊和登錄是常見的功能需求,這篇文章主要給大家介紹了關(guān)于Python+Mysql實(shí)現(xiàn)登錄注冊的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03一文詳解如何在Python中從字符串中提取部分內(nèi)容
這篇文章主要介紹了如何在Python中從字符串中提取部分內(nèi)容的相關(guān)資料,包括使用正則表達(dá)式、Pyparsing庫、AST(抽象語法樹)、字符串操作和函數(shù)式編程,每種方法都有其適用場景和優(yōu)缺點(diǎn),需要的朋友可以參考下2025-04-04使用Python腳本對GiteePages進(jìn)行一鍵部署的使用說明
剛好之前有了解過python的自動化,就想著自動化腳本,百度一搜還真有類似的文章。今天就給大家分享下使用Python腳本對GiteePages進(jìn)行一鍵部署的使用說明,感興趣的朋友一起看看吧2021-05-05