Подтвердить что ты не робот

Как зарегистрировать несколько моделей с администратором?

Если я хочу зарегистрировать свои модели у администратора, я должен сделать это вот так:

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

Но с несколькими моделями вы не можете сделать что-то вроде этого:

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

В первую очередь: почему бы и нет!? Во-вторых: представьте, что у вас много моделей, все из которых должны быть доступны из интерфейса администратора. Как вы это делаете в общем виде?

4b9b3361

Ответ 1

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)

Я тестировал это на своем сайте и отлично работал.

Ответ 2

Что касается недавнего выпуска 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

Update

Рассмотрим простой вызов вместо объявления класса

Ответ 3

На основе фрагмента здесь, то, что я обычно делаю, есть следующий код в моем 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

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

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