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

eeq64g8w  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(103)

我使用django-filter和我有两个模型CustomUserShop .如何改变过滤器选择queryset,使用户(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)

r7s23pms

r7s23pms1#

您可以使用qs方法在返回查询集之前对其进行过滤。
请参见过滤主`q。
所以在你的情况下,你应该能够说:

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

    return parent.filter(custom_user=owner)

字符串
我还没有测试过这个方法,但是如果你想对查询进行任何修改的话,这绝对是个好方法。

相关问题