【发布时间】:2017-04-02 04:57:20
【问题描述】:
我将 Django rest 框架与 django_filters 一起使用。 (我尽量简化/减少这里的代码)
如果请求中没有指定约束,我如何强制 django_filters 过滤约束__name=None(或约束=None)?
假设我有这个模型:
class Resource(models.Model):
constraints = models.ManyToManyField(Feature, related_name='constraint+', blank=True)
class Feature(models.Model):
name = models.CharField(max_length=255, blank=False, unique=True)
还有这个视图和过滤器:
class ResourceFilter(FilterSet):
constraints = django_filters.CharFilter(name='constraints__name')
class Meta:
model = Resource
fields = ['constraints']
class ResourceViewSet(viewsets.ModelViewSet):
serializer_class = ResourceSerializer
filter_class = ResourceFilter
filter_backends = (filters.DjangoFilterBackend,)
/api/resource/?constraints=testconstraint 工作正常,但我希望 /api/resource/ 只返回没有约束的资源。
我可以减少查询集,但感觉 django_filters 可以解决一些问题。是吗?:
def get_queryset(self):
if 'constraints' not in self.request.query_params:
return Resource.objects.filter(constraints=None)
else:
return Resource.objects.all()
【问题讨论】:
标签: python django django-rest-framework django-filter