Django Admin - Пользовательский вид списка изменений - PullRequest
5 голосов
/ 25 июля 2011

Мне нужно добавить пользовательское представление для администратора Django. Это должно быть похоже на стандартное представление ChangeList для определенной модели, но с настраиваемым набором результатов. (Мне нужно отобразить все модели с какой-либо датой или с другой датой, меньшей, чем сегодня, но это не очень важно).

Один из способов сделать это - использовать метод Admin queryset, например

class CustomAdmin(admin.ModelAdmin):
    ...
    def queryset(self, request):
        qs = super(CustomAdmin, self).queryset(request)
        if request.path == 'some-url':
            today = date.today()
            # Return a custom queryset
        else:
            return qs

Это гарантирует, что ...

Проблема в том, что я не знаю, как связать some-url со стандартным представлением ChangeList.

1 Ответ

5 голосов
/ 25 июля 2011

Итак, вам нужен второй URL, который идет в представление списка изменений, чтобы вы могли проверить, какой из двух он был по запрошенному URL, и затем соответствующим образом изменить набор запросов? Просто имитируйте, что делает django.contrib.admin.options, и добавьте другой URL-адрес в ModelAdmin.

Должно выглядеть примерно так:

class CustomAdmin(admin.ModelAdmin):

    def get_urls(self):
        def wrap(view):
            def wrapper(*args, **kwargs):
                kwargs['admin'] = self   # Optional: You may want to do this to make the model admin instance available to the view
                return self.admin_site.admin_view(view)(*args, **kwargs)
            return update_wrapper(wrapper, view)

        # Optional: only used to construct name - see below
        info = self.model._meta.app_label, self.model._meta.module_name

        urlpatterns = patterns('',
            url(r'^my_changelist/$',   # to your liking
                wrap(self.changelist_view),
                name='%s_%s_my_changelist' % info)
        )
        urlpatterns += super(CustomAdmin, self).get_urls()
        return urlpatterns
...