如何更改过滤器查询集取决于用户

问题描述 投票:0回答:1

我正在使用

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)

过滤器.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)
python django django-filter
1个回答
1
投票

您可以使用

qs
方法在返回查询集之前对其进行过滤。

请参阅过滤主要`qs。

因此,就您而言,您应该可以说:

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

    return parent.filter(custom_user=owner)

还没有测试过这个,但是如果您想对查询进行任何修改,这绝对是方法。

© www.soinside.com 2019 - 2024. All rights reserved.