【问题标题】:How to do multiple filtering on a queryset如何对查询集进行多重过滤
【发布时间】:2018-12-21 03:05:33
【问题描述】:

我需要做一个rest 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 进行过滤,则查询集应该返回与这两个条件都匹配的值

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多