在django中动态添加参数到queryset过滤器调用[重复]

Posted

技术标签:

【中文标题】在django中动态添加参数到queryset过滤器调用[重复]【英文标题】:Dynmically add arguments to queryset filter call in django [duplicate] 【发布时间】:2018-09-01 13:12:00 【问题描述】:

我有一个字符串列表,它将动态生成。所以它将是可变长度的:

keywords = ['apples','oranges','bananas']

我有一个模型 Fruitsalad,带有“描述”字段。假设我想在“描述”字段中查找所有带有“苹果”、“橙子”或“香蕉”的水果沙拉

results = Fruitsalad.objects.filter(Q(description__icontains=keywords[0]) | Q(description__icontains=keywords[1] | Q(description__icontains=keywords[2])

如果我事先不知道“关键字”列表的长度,我该如何生成上述查询?

【问题讨论】:

【参考方案1】:

你应该遍历你的数组,并对每个结果做一个联合

allresults = Fruitsalad.objects.all()
keywords = ['apples','oranges','bananas']
queryset = None
for keyword in keywords:
    if queryset == None:
        queryset = allresults.filter(description__icontains=keyword)
    else:
        queryset = queryset.union(allresults.filter(description__icontains=keyword))

#here are the desired results
print(queryset)

【讨论】:

以上是关于在django中动态添加参数到queryset过滤器调用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

模板中的 Django 动态对象过滤问题

django模型系统二

如何在django中将QuerySet过滤到每个组的最大成员?

django模型系统二

get_queryset中的Django 2.0 url参数

Django 1.9:为 QuerySet 创建复杂的自定义过滤器方法