我正在使用
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)
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)
您可以使用
qs
方法在返回查询集之前对其进行过滤。
请参阅过滤主要`qs。
因此,就您而言,您应该可以说:
@property
def qs(self):
parent = super().qs
owner = getattr(self.request, 'user', None)
return parent.filter(custom_user=owner)
还没有测试过这个,但是如果您想对查询进行任何修改,这绝对是方法。