【问题标题】:Dynamically setting OR filter values in Django queryset在 Django 查询集中动态设置 OR 过滤器值
【发布时间】:2013-05-20 20:56:32
【问题描述】:

我从here 知道要在 Django 中对查询集执行 OR 操作,我可以这样做:

from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))

现在假设我不想在过滤器调用中对 Q 条件进行硬编码,而是要动态设置它们。也就是说,假设我想做这样的事情:

User.objects.filter(Q(income__gte=5000) [ONLY IF CONDITION A...] | Q(income=0) [ONLY IF CONDITION B...) | Q(name__contains="blah") [ONLY IF CONDITION C...])

换句话说,如果 Q 对象是一个字符串,我想在某些条件下附加某些额外的 Q 对象。这可能表示为:

q_string = ""
if conditionA:
    q_string += Q(income__gte=5000)
if conditionB:
    q_string = Q(income=0)

User.objects.filter(q_string)

但是进入过滤器的东西实际上不能是字符串,所以这行不通。我应该怎么做?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    你可以这样做:

    q1 = Q()
    if conditionA:
        q1 |= Q(income__gte=5000)
    if conditionB:
        q1 |= Q(income=0)
    
    User.objects.filter(q1)
    

    【讨论】:

      【解决方案2】:
      query_string = ""
      if conditionA:
          query_string += Q(income__gte=5000)
      if conditionB:
          query_string = Q(income=0)
      
      User.objects.filter(query_string)
      

      【讨论】:

        猜你喜欢
        • 2020-11-13
        • 2010-10-25
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        相关资源
        最近更新 更多