【问题标题】:Django query using OR condition使用 OR 条件的 Django 查询
【发布时间】:2010-09-26 15:45:42
【问题描述】:

在 Django 中,如何查询以获得两个不同的值,如下所示?

profile_setting = (pSetting.objects.get(module="my_mod", setting_value=1) or
                   pSetting.objects.get(module="my_mod", setting_value=0))

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    结帐 django 的 Q-class:

    profile_setting = pSetting.objects.get(Q(module="my_mod"),\
                      Q(setting_value=1)|Q(setting_value=0))
    

    此外,为了改善你的编码风格,看看一些coding guidelines,你最好将你的模型类命名为PSetting

    【讨论】:

    【解决方案2】:

    你确定你只抓取一个对象吗?

    如果您尝试获取一组对象的查询集,您需要做的就是将过滤器链接在一起:

    profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=0)
                             .filter(module="my_mod", setting_value__in=1)
    

    但是,由于除了 setting_value 之外的所有内容都相同,因此您可以简单地查找列表或元组:

    profile_setting = pSetting.objects.filter(module="my_mod", setting_value__in=[0,1])
    

    (当且仅当您确定您将只获得一个对象作为对查询的响应时,上述 alexdb 的建议才适用)

    【讨论】:

      【解决方案3】:

      此任务有一个 Q() 对象 - 看这里:Complex Queries with Q() object

      例如:

      profile_setting = pSetting.objects.get(
          Q(module="my_mod", setting_value=1) | Q(module="my_mod", setting_value=0)
      )
      

      【讨论】:

        【解决方案4】:
         profile_setting = pSetting.objects.get(module="my_mod",setting_value__in=[0,1])
        

        【讨论】:

          【解决方案5】:

          对于此类查询,请查看此文档link

          对于您的具体问题,您可以传递多个查询集对象(Q) 用于查询集 | get() 和 filter() 函数中的 OR 条件和 AND 条件。

          【讨论】:

            猜你喜欢
            • 2011-03-18
            • 2013-01-11
            • 1970-01-01
            • 2012-01-04
            • 2011-09-27
            • 2015-10-06
            • 2015-05-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多