最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django批量向admin注冊模型方法詳解

 更新時間:2023年06月21日 14:56:12   作者:alue  
這篇文章主要為大家介紹了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注冊模型的資料請關注腳本之家其它相關文章!

相關文章

最新評論

江安县| 阿克| 区。| 舒城县| 临武县| 界首市| 广宗县| 玉龙| 芦溪县| 宜兰县| 年辖:市辖区| 耿马| 克什克腾旗| 龙江县| 淅川县| 五峰| 沁水县| 鄂托克前旗| 南充市| 礼泉县| 伊宁市| 兴业县| 中江县| 泰和县| 什邡市| 温州市| 湘阴县| 河津市| 兰州市| 仁怀市| 沁源县| 连山| 慈利县| 屏东市| 凌源市| 青川县| 宁晋县| 高邮市| 孟村| 文安县| 汶上县|