Django批量向admin注冊模型方法詳解
大量模型需要注冊到 admin 頁面
如果有大量模型需要注冊到 admin 頁面, 手工一個個復制粘貼,然后修改名稱, 還挺麻煩. 有沒有自動化途經(jīng)呢?
一個最直觀的做法如下:
from django.apps import apps
models = apps.get_models()
for model in models:
admin.site.register(model)
的確能夠完成目標, 但存在一個缺陷. 如果有些模型已經(jīng)被注冊過了, 那么程序?qū)伋霎惓? 因為模型不能重復注冊.
所以, 可以做個異常處理, 如果已經(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 注冊行為之后運行.
如果, 我們想讓注冊后的 admin 列表頁自動顯示所有字段, 那該如何修改上述代碼呢?
我們可以利用 admin.register(model_or_iterable, admin_class=None) 方法的第二個參數(shù) admin_class , 來實現(xiàn)這一行為.
list_display 的動態(tài)獲取
通過構(gòu)造 mixin 類 ListAdminMixin, 實現(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
這樣就實現(xiàn)了預期的功能.
以上就是Django批量向admin注冊模型方法詳解的詳細內(nèi)容,更多關于Django批量向admin注冊模型的資料請關注腳本之家其它相關文章!
相關文章
Python基于ThreadingTCPServer創(chuàng)建多線程代理的方法示例
這篇文章主要介紹了Python基于ThreadingTCPServer創(chuàng)建多線程代理的方法,結(jié)合實例形式分析了Python使用ThreadingTCPServer模塊實現(xiàn)多線程代理功能進行網(wǎng)絡請求響應的相關操作技巧,需要的朋友可以參考下2018-01-01
Python讀取Hive數(shù)據(jù)庫實現(xiàn)代碼詳解
這篇文章主要介紹了Python讀取Hive數(shù)據(jù)庫實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
python Django實戰(zhàn)之歌曲搜索功能實現(xiàn)
這篇文章主要為大家詳細介紹了如何利用python Django實現(xiàn)歌曲搜索功能,文中的示例代碼講解詳細,具有一定的參考價值,有需要的小伙伴開業(yè)了解下2023-10-10

