【问题标题】:Django QuerySet OR statement [duplicate]Django QuerySet OR 语句 [重复]
【发布时间】: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)。

【问题讨论】:

标签: python django


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 2021-05-13
      • 2019-06-14
      • 1970-01-01
      • 2019-02-08
      • 2010-09-13
      • 2016-01-30
      • 1970-01-01
      • 2019-10-21
      相关资源
      最近更新 更多