我不知道为什么查询不在FilterSet类中的字段时会返回所有数据
这是我的模特
class TempModel(models.Model):
md5 = models.CharField()
sha1 = models.CharField()
以下是我的filterSet类
class TempFilter(filters.FilterSet):
class Meta:
model = TempModel
fields = ("md5")
最后这是我的ViewSet
class TempViewSet(viewsets.ModelViewSet):
queryset = TempModel.objects.all()
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
serializer_class = TempSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = TempFilter
我提出请求时
/temp/?md5=XXXX
,效果很好,但是{strong> /temp/?sha1=XXXX
,它返回所有数据。
我认为如果未指定请求字段,则找不到返回的内容。
我尝试在FilterSet类中定义排除,但仍然无法正常工作,如何解决该问题?
答案 0 :(得分:0)
我在the django-filters documentation中发现,您可以覆盖qs
属性以过滤主查询集(在视图集中声明的queryset = TempModel.objects.all()
)。
class TempFilter(filters.FilterSet):
class Meta:
model = TempModel
fields = ("md5")
@property
def qs(self):
queryset = super(TempModel, self).qs
query_params = self.request.query_params
if any(query_param not in TempModel.Meta.fields for query_param in query_params):
return queryset.none()
return queryset
因此,如果没有任何查询参数,则上面的代码将返回空的查询集。