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

Повторное использование Changelist Django вне сайта администратора

Таблица списков изменений в Django действительно классная - поиск, фильтрация, многоэкранные действия и т.д.

Я создаю пользовательский бэкэнд для приложения, и я продолжаю понимать: это именно то, что мне нужно, я должен его повторно использовать.

У кого-нибудь есть опыт использования списка изменений вне приложения Django admin?

В настоящее время я пришел к такому:

from profile.admin import ProfileAdmin
from django.contrib.admin.sites import AdminSite
from profile.models import Profile
profile_admin = ProfileAdmin(Profile, AdminSite())
return profile_admin.changelist_view(request)

Я хотел бы знать, имел ли кто-нибудь опыт с этим или может предложить альтернативу.

4b9b3361

Ответ 1

ChangeList как класс действительно классный и функциональный. Однако трудно использовать вне контекста монолита AdminSite.

Класс ChangeList принимает 12 требуемых параметров __init__(). Только это число должно оттолкнуть вас и вдвойне, когда вы поймете, что все они получены из Admin changelist_view(). Хотя эти параметры остались неизменными с Django 1.1, они изменились с 1.0, и это так много внутреннего объекта Django, я бы не стал полагаться на его стабильный интерфейс.

Лучший способ использовать ChangeList - или, в частности, получить преимущества в списках изменений (что вам нужно) - использовать метод changelist_view(). Использование этого, конечно, требует использования/подкласса AdminSite. Это стоит сделать или, по крайней мере, попробовать. Похоже, вы уже есть.

Этот метод принимает параметр request и любит /(?P<app_label>%s)/(?P<model_name>%s)/ в маршруте URL, который указывает на него.

Копаем в код:

  • ChangeList живет в django.contrib.admin.views.main
  • changelist_view() - это метод на django.contrib.admin.options.ModelAdmin

UPDATE: В Django 1.4 оба ChangeList и changelist_view() изменены путем добавления одного и двух новых параметров соответственно.