带lis的Django多重过滤器

2024-07-05 14:34:53 发布

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

我有一个从multipleechoicefield对象中选择的项目的列表。在创建了这个列表之后,如何对Django模型表进行筛选,以便它选择具有列表中任何值的所有项?在

例如,如果我选择了苹果、橘子和草莓,它将返回水果选择表中的所有数据,其中水果名为苹果、橙子或草莓。在

from someApp.models import FruitChoices

def main(form_list):
    r = FruitChoices

    data = {}
    for form in form_list:
        data.update(form.cleaned_data)

        fruits = data['fruit_list']

        for item in fruits:
            result = r.objects.filter(fruit_name__contains='%s' % item)

    return result

Tags: in苹果form列表fordataresultitem
2条回答

你能做到的

import operator
from django.db import Q
r.objects.filter(reduce(operator.or_, (Q(fruit_name__contains=i) for i in fruits)))

我推荐这种方法的原因是,如果使用__in,它将匹配整个单词。但是您需要的是__contains,并且没有直接在ORM中这样做的直接方法。因此Q对象

这相当于:

^{pr2}$

你说过

where the fruit_name is apples, or oranges, or strawberries

以及

so that it selects all of the items with any of the values in the list

但您使用的是“包含”过滤器。在

你需要找到子串吗,比如“坏草莓”?如果没有,您可以使用“\uuu in”过滤器,并降低整个问题的复杂性。在

r.objects.filter(fruit_name__in=data['fruit_list'])

相关问题 更多 >