gpt4 book ai didi

django - 在 Django 管理页面中从应用程序注册每个表/类

转载 作者:行者123 更新时间:2023-11-28 19:36:18 24 4
gpt4 key购买 nike

我有一个名为 doors 的应用程序,我的应用程序的 models.py 有 10 个表/类。在我的 admin.py 下,如何在文件 models.py 中注册每个模型?

例如,目前我必须对其进行硬编码:

from django.contrib import admin
from doors.models import *

admin.site.register(Group)
admin.site.register(Item)
admin.site.register(ItemType)
admin.site.register(Location)
admin.site.register(Log)
admin.site.register(Order)
admin.site.register(Property)
admin.site.register(User)
admin.site.register(Vendor)

有没有办法找到 models.py 中的每个类,然后遍历并注册每个类?或者是否有某种我可以与 Django 一起使用的通配符?

最佳答案

似乎 get_models 和 get_app 在 django 1.8 中不再可用。

可以使用以下内容:

from django.contrib import admin
from django.apps import apps

app = apps.get_app_config('dashboard')

for model_name, model in app.models.items():
admin.site.register(model)

EXTENSION:如果您想将模型的所有或选择字段显示为网格而不是模型对象的单列 unicode 表示,您可以使用此:

app = apps.get_app_config('your_app_name')
for model_name, model in app.models.items():
model_admin = type(model_name + "Admin", (admin.ModelAdmin,), {})

model_admin.list_display = model.admin_list_display if hasattr(model, 'admin_list_display') else tuple([field.name for field in model._meta.fields])
model_admin.list_filter = model.admin_list_filter if hasattr(model, 'admin_list_filter') else model_admin.list_display
model_admin.list_display_links = model.admin_list_display_links if hasattr(model, 'admin_list_display_links') else ()
model_admin.list_editable = model.admin_list_editable if hasattr(model, 'admin_list_editable') else ()
model_admin.search_fields = model.admin_search_fields if hasattr(model, 'admin_search_fields') else ()

admin.site.register(model, model_admin)

它的作用是动态扩展 ModelAdmin 类并设置 list_display 字段,这是在管理中以网格表示形式显示模型数据所必需的。如果您在模型中将所需的字段列为admin_list_display,它会采用该字段,否则会生成模型中所有可用字段的元组。

其他可选字段也可以类似设置,比如list_filter

参见 django documentation有关 list_display 的更多信息。

关于django - 在 Django 管理页面中从应用程序注册每个表/类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com