场景

实际的开发过程中,往往Model多达几十个,一个个写Admin,再Register,效率低。

思考

能自动注册Model到管理后台

方案

  1. 在项目配置目录下新建一个文件夹apps,再在文件夹下穿件项目同名APP。

  2. 重写APP下apps.py文件中AppConfig类的ready方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    from django.apps import apps


    class ListAdminMixin:
    def __init__(self, model, admin_site):
    self.list_display = (field.name for field in model._meta.fields)
    super(ListAdminMixin, self).__init__(model, admin_site)

    class UnionAdminApp(AppConfig):
    name = 'project_name'

    def ready(self):
    models = apps.get_models()
    for model in models:
    admin_class = type("AdminClass", (ListAdminMixin, admin.ModelAdmin))
    try
    admin.site.register(model)
    except admin.sites.AlreadyRegistered:
    pass
  3. 将APP注册到Django最后。