【问题标题】:django queries: OR operator, should return only one recorddjango 查询:OR 运算符,应该只返回一条记录
【发布时间】:2016-07-05 13:51:01
【问题描述】:

在 Django 中,MySQL 设置以下查询

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

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

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

注意:约束是只有 1 个查询应该用于获取数据,并且查询应该首先返回特定对象(即 xyz)。只有当它不存在时,default 对象才应该是返回

【问题讨论】:

  • 找到多条要返回哪个?..
  • @sayse 我想要特定(即 xyz)对象存在时,只有当它不存在时我才想要默认对象。

标签: mysql django


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

【讨论】:

  • [0] 元素可以是任何 'xyz' 或 'default' ,我想要的是如果 'xyz' 如果存在则返回它。否则给我默认的 obj..
  • 如我所说,使用order_by 来控制两者中的哪一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
相关资源
最近更新 更多