django查询:OR运算符,应该只返回一条记录

时间:2016-07-05 13:51:01

标签: mysql django

在Django中,MySQL设置了以下查询

  

data = Recording.objects.get(Q(name ='xyz')| Q(name =“default”))

这个抛出MultipleObjectsReturned,因为xyzdefault记录都存在于DB中,而MySQL在OR operation个查询中返回两个对象。 (这是正确的MySQL行为)

在Django / MySQL中是否有一种方法,即使两个记录都存在于DB中,上述查询也只返回一个对象?

注意:约束只有1个查询应该用于获取数据,查询应该首先返回特定对象(即xyz)。如果它不存在,则default对象被退回

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,

.get应该用于检索单个记录。否则使用filter

data = Recording.objects.filter(Q(name='xyz') | Q(name="default")).first()

如果哪一个很重要,请使用order_by来安排订单。

你也可以使用:

data = Recording.objects.filter(Q(name='xyz') | Q(name="default"))[0]

实际上是一样的。有关详细信息,请参阅Django docs