Django QuerySet OR 语句 [重复]
Posted
技术标签:
【中文标题】Django QuerySet OR 语句 [重复]【英文标题】:Django QuerySet OR statement [duplicate] 【发布时间】:2017-06-22 23:29:42 【问题描述】:有没有办法在 Django 中获取一个 QuerySet,以便剩余的对象至少满足多个约束中的一个(即 OR 语句)?
类似:
remaining = Fruits.objects.all()
fruit_type = ['apple', 'orange'] # input from user
for fruit in fruit_type:
remaining = remaining.filter(FruitType__icontains=fruit)
但是,上面只返回同时包含 'orange' 和 'apple' 的 FruitTypes(而不是 orange OR apple)。
【问题讨论】:
检查这个问题***.com/questions/4824759/… docs.djangoproject.com/en/1.10/topics/db/queries/… 浏览此链接 【参考方案1】:你可以的
from django.db.models import Q
query = Q()
for fruit in fruit_type:
query |= Q(FruitType__icontains=fruit)
remaining = remaining.filter(query)
【讨论】:
【参考方案2】:你可以使用 Q 对象来执行复杂的查询集
from django.db.models import Q
for fruit in fruit_type:
query |= Q(FruitType__icontains=fruit)
# Query the model
remaining = remaining.filter(query)
请参阅 django 文档https://docs.djangoproject.com/en/1.10/topics/db/queries/#complex-lookups-with-q 了解更多信息。
【讨论】:
有没有办法将它集成到for
循环中?用户输入fruit_type,因此它的长度可能是0到10。最坏的情况是我可以写10个if
我想的语句。无论如何感谢您的帮助!
是的,你可以。我编辑了分析器,希望对您有所帮助。【参考方案3】:
fruit_type = ['apple', 'orange']
remaining = Fruits.objects.filter(FruitType__in=fruit_type)
【讨论】:
以上是关于Django QuerySet OR 语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在django中动态添加参数到queryset过滤器调用[重复]