如何对查询进行多重过滤

2024-10-03 00:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个restapi端点,在这里用户可以使用多个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 queryset应该返回与这两个条件匹配的值


Tags: 用户name模型selffields参数getmodels
1条回答
网友
1楼 · 发布于 2024-10-03 00:26:25

我已经弄明白了,我一直在迭代查询集而不保存以前的过滤器,最后像下面这样更改代码,像魅力一样工作

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

相关问题 更多 >