使用OR条件的Django查询

时间:2010-09-26 15:45:42

标签: django django-queryset

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

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

5 个答案:

答案 0 :(得分:10)

结帐django的Q-class

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

此外,为了改善您的编码风格,请查看一些coding guidelines,您应该更好地命名您的模型类PSetting

答案 1 :(得分:4)

你确定你只抓住一个物体吗?

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

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的上述建议是正常的)

答案 2 :(得分: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)
)

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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