Как принудительно использовать фильтр в качестве целевой страницы в виде списка?

#django-admin

#django-admin

Вопрос:

Я бы хотел, чтобы каждый раз, когда пользователь посещает список моделей в Django admin, попадал на страницу с фильтром, примененным вместо никем не примененного.

В частности, я хотел бы определить применяемый фильтр на основе атрибута пользователя.

Как я могу этого добиться?

Ответ №1:

Редактировать:

Неверно истолковал ваш вопрос, извините!

Чтобы выбрать фильтр по умолчанию для пользователя на основе атрибута user, используйте changelist_view


Переопределите метод ModelAdmin queryset.

http://docs.djangoproject.com/en/1.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.набор запросов

приведенный пример:

 class MyModelAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(MyModelAdmin, self).queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)
  

измените фильтрацию на основе вашего пользовательского атрибута.

Комментарии:

1. Это приведет к отображению выбранного фильтра, выделенного в фильтре администратора?

2. Использование queryset () приведет к предварительной фильтрации объектов, прежде чем пользователю будет разрешено применять фильтры. Используя changelist_view, вы можете применить фильтр по умолчанию на основе атрибута пользователя ко всему списку объектов.