Як я можу створити декілька ModelAdmin для однієї і тієї ж моделі, кожну з яких можна налаштувати по-різному і пов'язати з різними URL-адресами?
Скажімо, у мене є модель Джанго під назвою Posts. За замовчуванням у адміністраторському перегляді цієї моделі будуть перераховані всі об'єкти Пост.
Я знаю, що я можу налаштувати список об’єктів, що відображаються на сторінці різними способами, встановивши такі змінні, як list_display, або змінивши queryset
метод у моєму ModelAdmin, як:
class MyPostAdmin(admin.ModelAdmin):
list_display = ('title', 'pub_date')
def queryset(self, request):
request_user = request.user
return Post.objects.filter(author=request_user)
admin.site.register(MyPostAdmin, Post)
За замовчуванням це буде доступне за URL-адресою /admin/myapp/post
. Однак я хотів би мати кілька переглядів / ModelAdmins однієї моделі. наприклад /admin/myapp/post
, перелічитиме всі об'єкти публікації та /admin/myapp/myposts
перелічить усі публікації, що належать користувачеві, а також /admin/myapp/draftpost
перелічити всі публікації, які ще не були опубліковані. (це лише приклади, мої фактичні випадки використання складніші)
Ви не можете зареєструвати більше однієї моделі ModelAdmin для однієї моделі (це призводить до AlreadyRegistered
виключення). В ідеалі я хотів би досягти цього, не вкладаючи все в один клас ModelAdmin і не записуючи власну функцію 'urls', щоб повернути інший набір запитів залежно від URL-адреси.
Я переглянув джерело Django і бачу такі функції, ModelAdmin.changelist_view
які можна було б якось включити в мій urls.py, але я не впевнений, як саме це буде працювати.
Оновлення : я знайшов один із способів робити те, що я хочу (див. Нижче), але все одно хотів би почути інші способи цього.