如何对查询集进行多次过滤

时间:2018-12-21 03:05:34

标签: python django

我需要创建一个休息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进行过滤,则查询集应返回与两个条件均匹配的值

1 个答案:

答案 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
相关问题