Django批量向admin注册模型方法详解
作者:alue
这篇文章主要为大家介绍了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注册模型的资料请关注脚本之家其它相关文章!