Как изменить набор запросов фильтра, зависит от пользователя - PullRequest
2 голосов
/ 11 апреля 2020

Я использую django-filter, и у меня есть две модели CustomUser и Shop. Как изменить набор запросов, чтобы пользователь (request.user) мог фильтровать только свои магазины?

Пользователь

class CustomUser(AbstractBaseUser, PermissionsMixin):
    shop = models.ManyToManyField(Shop, blank=True, related_name='custom_user')

Магазин

class Shop(models.Model):
    address = models.CharField(_('Address'), unique=True, max_length=64, blank=False, null=False, db_index=True)

filters.py

shops = Shop.objects.filter(is_active=True)
SHOP_CHOICES = [('All', 'All')]
for x in shops:
    SHOP_CHOICES.append((x.address, x))
SHOP_CHOICES = tuple(SHOP_CHOICES)


class ShopFilter(django_filters.FilterSet):
    address = django_filters.MultipleChoiceFilter(choices=SHOP_CHOICES)

    class Meta:
        model = Shop
        fields = ['address']

views.py

f = ShopFilter(request.GET)

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете отфильтровать набор запросов перед его возвратом, используя метод qs.

См. Фильтрация первичного `qs.

Так что в вашем случае вы должны быть в состоянии сказать:

@property
def qs(self):
    parent = super().qs
    owner = getattr(self.request, 'user', None)

    return parent.filter(custom_user=owner)

Не проверял это, но это определенно метод, если вы хотите внести какие-либо изменения в запрос.

...