Django批量向admin注冊(cè)模型方法詳解
大量模型需要注冊(cè)到 admin 頁(yè)面
如果有大量模型需要注冊(cè)到 admin 頁(yè)面, 手工一個(gè)個(gè)復(fù)制粘貼,然后修改名稱, 還挺麻煩. 有沒(méi)有自動(dòng)化途經(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)被注冊(cè)過(guò)了, 那么程序?qū)伋霎惓? 因?yàn)槟P筒荒苤貜?fù)注冊(cè).
所以, 可以做個(gè)異常處理, 如果已經(jīng)注冊(cè), 那就 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 注冊(cè)行為之后運(yùn)行.
如果, 我們想讓注冊(cè)后的 admin 列表頁(yè)自動(dòng)顯示所有字段, 那該如何修改上述代碼呢?
我們可以利用 admin.register(model_or_iterable, admin_class=None) 方法的第二個(gè)參數(shù) admin_class , 來(lái)實(shí)現(xiàn)這一行為.
list_display 的動(dòng)態(tài)獲取
通過(guò)構(gòu)造 mixin 類 ListAdminMixin, 實(shí)現(xiàn) list_display 的動(dòng)態(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注冊(cè)模型方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Django批量向admin注冊(cè)模型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python基于ThreadingTCPServer創(chuàng)建多線程代理的方法示例
這篇文章主要介紹了Python基于ThreadingTCPServer創(chuàng)建多線程代理的方法,結(jié)合實(shí)例形式分析了Python使用ThreadingTCPServer模塊實(shí)現(xiàn)多線程代理功能進(jìn)行網(wǎng)絡(luò)請(qǐng)求響應(yīng)的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python數(shù)據(jù)分析基礎(chǔ)之文件的讀取
這篇文章主要為大家介紹了Python數(shù)據(jù)分析之文件的讀取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12
基于PyQt5實(shí)現(xiàn)一個(gè)無(wú)線網(wǎng)連接器
為了方便不會(huì)python的朋友也能夠使用,本文將用pyqt5將制作一個(gè)帶界面的無(wú)線網(wǎng)連接器,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
Flask學(xué)習(xí)筆記之日志操作配置實(shí)例講解
這篇文章主要為大家介紹了Flask學(xué)習(xí)筆記之日志操作配置實(shí)例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Python讀取Hive數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼詳解
這篇文章主要介紹了Python讀取Hive數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Python實(shí)現(xiàn)合并兩個(gè)字典的8種方法
Python有多種方法可以通過(guò)使用各種函數(shù)和構(gòu)造函數(shù)來(lái)合并字典,本文主要介紹了Python實(shí)現(xiàn)合并兩個(gè)字典的8種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Python 實(shí)現(xiàn)打印單詞的菱形字符圖案
這篇文章主要介紹了Python 實(shí)現(xiàn)打印單詞的菱形字符圖案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
python Django實(shí)戰(zhàn)之歌曲搜索功能實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何利用python Django實(shí)現(xiàn)歌曲搜索功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴開(kāi)業(yè)了解下2023-10-10

