31

モデルを管理者に登録したい場合は、次のようにする必要があります。

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

しかし、複数のモデルでは、次のようなことはできません。

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

まず第一に:なぜそうではありません!?次に、管理インターフェースからすべてにアクセスできるモデルがたくさんあると想像してください。一般的な方法でそれをどのように行いますか?

4

8 に答える 8

53

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)

私は自分のサイトでこれをテストし、完全に正常に動作します。

于 2012-10-24T07:53:57.820 に答える
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

アップデート

ダミークラスを宣言する代わりに、単純な呼び出しを行うことを検討してください

于 2014-02-25T04:33:11.600 に答える
6
# File: admin.py
from django.contrib import admin
from .models import Project, Client, About

admin.register(Project, Client, About)(admin.ModelAdmin)
于 2015-07-22T16:06:40.733 に答える
2

ここのスニペットに基づいて、私が通常行うことは、私の中に次のコードを含めることです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')
于 2013-09-09T13:46:27.550 に答える
2

admin.pyのDjango3.1.3を使用

from .models import Course, Category

admin.site.register(Course)
admin.site.register(Category)
于 2020-11-26T22:53:16.707 に答える
1

これは、複数のモデルを再取得するためのより良い方法です

from django.contrib import admin
from myapp.models import Course, Category

admin.site.register(Course)
admin.site.register(Category)
于 2021-10-11T14:03:29.623 に答える
0
from django.contrib import admin

from .models import *


@admin.register(Project, Client, About)
class AppAdmin(admin.ModelAdmin):
    pass
于 2020-03-23T21:37:07.110 に答える
0

これは、カスタムモデルが存在する場合に管理UIに登録しようとする問題です。それ以外の場合は、デフォルトのモデルが機能します。これを機能させるには、末尾に「Admin」を追加して、カスタム管理クラスに「MyModelAdmin」という名前を付ける規則に従う必要があります。 。

for model_name, model in apps.get_app_config('myapp').models.items() :
    if      '_' not in model_name   :
        if      globals().get(model.__name__+'Admin')   :
            admin.site.register(model, globals().get(model.__name__+'Admin'))
        else                                        :
            admin.site.register(model)
于 2020-07-20T18:17:52.583 に答える