Django批量向admin注册模型方法详解
大量模型需要注册到 admin 页面
如果有大量模型需要注册到 admin 页面, 手工一个个复制粘贴,然后修改名称, 还挺麻烦. 有没有自动化途经呢?
一个最直观的做法如下:
from django.apps import apps models = apps.get_models() for model in models: admin.site.register(model)
的确能够完成目标, 但存在一个缺陷. 如果有些模型已经被注册过了, 那么程序将抛出异常, 因为模型不能重复注册.
所以, 可以做个异常处理, 如果已经注册, 那就 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)
方法的第二个参数 admin_class
, 来实现这一行为.
list_display 的动态获取
通过构造 mixin 类 ListAdminMixin
, 实现 list_display 的动态获取:
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
这样就实现了预期的功能.
以上就是Django批量向admin注册模型方法详解的详细内容,更多关于Django批量向admin注册模型的资料请关注脚本之家其它相关文章!
相关文章
python之pyinstaller组件打包命令和异常解析实战
前段时间在制作小工具的时候,直接在命令行用pyinstaller工具打包成功后,启动exe可执行文件的时候各种报错, 今天,我们就分享一下踩坑经过,需要的朋友可以参考下2021-09-09
最新评论