如何使用admin注册多个模型?

Lar*_*gas 21 django django-admin

如果我想用管理员注册我的模型,我必须这样做:

#admin.py
admin.site.register(models.About)
Run Code Online (Sandbox Code Playgroud)

但是对于多个模型,你不能做这样的事情:

models = (models.Project, models.Client, models.About)
for m in models:
   admin.site.register(m)
Run Code Online (Sandbox Code Playgroud)

首先:为什么不呢??其次:想象一下有很多模型都应该可以从管理界面访问.你是如何以通用的方式做到这一点的?

Roh*_*hit 31

admin.site.register 在库中有这个定义:

def register(self, model_or_iterable, admin_class=None, **options):
Run Code Online (Sandbox Code Playgroud)

所以要注册的模型可以是单个模型或可迭代对象,所以只需使用:

myModels = [models.Project, models.Client, models.About]  # iterable list
admin.site.register(myModels)
Run Code Online (Sandbox Code Playgroud)

我在我的网站上测试了这个并且工作得很好.


Yeo*_*Yeo 6

对于最近发布的 Django 1.7,您可以使用django.contrib.admin.register装饰器来注册使用相同管理类的多个模型。

from django.contrib import admin
from .models import Project, Client, About

@admin.register(Project, Client, About)
class DefaultAdmin(admin.ModelAdmin):
    pass
Run Code Online (Sandbox Code Playgroud)

更新

考虑进行简单的调用而不是声明一个虚拟类


Yeo*_*Yeo 6

# File: admin.py
from django.contrib import admin
from .models import Project, Client, About

admin.register(Project, Client, About)(admin.ModelAdmin)
Run Code Online (Sandbox Code Playgroud)