как ограничить набор запросов встроенной модели в админке django

У меня реализованы две модели вроде

class A(models.Model):
    a_name = models.CharField(max_length=50)

class B(models.Model):
    a = models.ForeignKey(A)
    b_tag = models.CharField(max_length=50)
    user=models.ForeignKey(User)             # stores username

Теперь я определяю A администратора и регистрирую его в B как подкласс TabularInline. Интересно, можно ли каким-то образом отфильтровать список объектов B до отображения встроенного набора форм, чтобы не все объекты B, связанные с A, попали в набор форм, а только те, чей параметр user соответствует текущему авторизованному пользователю!


person krishnan    schedule 03.06.2015    source источник


Ответы (1)


Используйте метод get_queryset: https://docs.djangoproject.com/en/stable/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

Должно получиться так:

class BAdmin(admin.TabularInline):
    ...

    def get_queryset(self, request):
        qs = super(BAdmin, self).get_queryset(request)
        return qs.filter(user=request.user)
person noamk    schedule 03.06.2015
comment
большое спасибо .Это сработало как шарм! . Если бы я мог побеспокоить вас еще об одном, почему наша переопределенная функция вызывает свой суперкласс TabularInline. - person krishnan; 03.06.2015
comment
Вызов суперкласса получает начальный набор запросов, который фильтрует модель A. - person noamk; 03.06.2015
comment
В общем, это отличный метод для фильтрации TabularInline и StackedInline. - person user3507825; 19.03.2021