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

时间:2012-10-24 07:43:24

标签: django django-admin

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

#admin.py
admin.site.register(models.About)

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

models = (models.Project, models.Client, models.About)
for m in models:
   admin.site.register(m)

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

7 个答案:

答案 0 :(得分:29)

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

def register(self, model_or_iterable, admin_class=None, **options):

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

myModels = [models.Project, models.Client, models.About]  # iterable list
admin.site.register(myModels)

我在我的网站上对此进行了测试,效果非常好。

答案 1 :(得分:5)

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

admin.register(Project, Client, About)(admin.ModelAdmin)

答案 2 :(得分:4)

关于最近发布的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

更新

考虑making a simple call instead of declaring a dummy class

答案 3 :(得分:2)

根据代码段here,我通常在admin.py

中包含以下代码
from django.db.models import get_models, get_app
from django.contrib import admin
from django.contrib.admin.sites import AlreadyRegistered

def autoregister(*app_list):
    for app_name in app_list:
        app_models = get_app(app_name)
        for model in get_models(app_models):
            try:
                admin.site.register(model)
            except AlreadyRegistered:
                pass

autoregister('myapp')

答案 4 :(得分:0)

from django.contrib import admin

from .models import *


@admin.register(Project, Client, About)
class AppAdmin(admin.ModelAdmin):
    pass

答案 5 :(得分:0)

这是一个变通方法,如果存在自定义模型,则尝试将其注册到admin UI,否则将默认模型注册到admin UI,为此,必须遵循通过将“ Admin”命名为“ MyModelAdmin”的自定义管理类的约定到最后。

if(isset($_POST['wa'])) {
    echo CHtml::script("window.parent.$('#cru-dialog').dialog('close');
    window.parent.$('#cru-frame').attr('src','');
    window.open('https://api.whatsapp.com/send?phone=+62878787811423&text=Tesdawks');
");
}

答案 6 :(得分:0)

使用Django 3.1.3 在admin.py

from .models import Course, Category

admin.site.register(Course)
admin.site.register(Category)