我需要创建一个休息api端点,用户可以在其中使用多个get参数进行过滤,这些参数是相应模型的字段。
我获得了模型字段的列表并获得了get参数值,我需要根据给定的get参数过滤所有结果
def get_queryset(self, *args, **kwargs):
query_set = models.Resident.objects.all()
fields = models.Resident._meta.get_fields()
for x in fields:
fieldValue = self.request.GET.get(x.name)
fieldName = x.name
if fieldValue is not None:
query_set.filter(**{fieldName: fieldValue})
return query_set
如果用户希望通过username = foo和email=email@meail.com进行过滤,则查询集应返回与两个条件均匹配的值
答案 0 :(得分:0)
我已经弄清楚了,我一直在遍历整个查询集而不保存以前的过滤器,最后像下面这样更改了代码,像魅力一样工作
def get_queryset(self, *args, **kwargs):
query_set = models.Resident.objects
fields = models.Resident._meta.get_fields()
for x in fields:
fieldValue = self.request.GET.get(x.name)
fieldName = x.name
if fieldValue is not None:
query_set = query_set.filter(**{fieldName: fieldValue})
return query_set