【发布时间】:2018-05-14 12:29:11
【问题描述】:
我正在使用 Django 2.0 并遇到奇怪的问题,查询集 needs 由两个查询集的 union() 生成:
needs.get(pk="3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f")
---------------------------------------------------------------------------
MultipleObjectsReturned Traceback (most recent call last)
<ipython-input-29-300ad17a22c2> in <module>()
----> 1 needs.get(pk="3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f")
/usr/local/lib/python3.6/site-packages/django/db/models/query.py in get(self, *args, **kwargs)
405 raise self.model.MultipleObjectsReturned(
406 "get() returned more than one %s -- it returned %s!" %
--> 407 (self.model._meta.object_name, num)
408 )
409
并且使用相同的查询集:
for n in needs:
print(n.pk)
3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f
7c134214-6309-4881-b381-016cc00a31a5
所以:needs 是一个包含两个对象的查询集,其中一个对象的主键(UUID)设置为3fbdcc49-2f06-46ea-a0a3-587ac5aaf50f。但是get() 函数引发了 MultipleObjectsReturned。
知道是什么导致了这种行为吗?寻找带有字符串表示的 UUID 是否正确?
不用过多打扰您的模型,下面是我生成 needsqueryset 的方法:
own_needs = models.Need.objects.filter(owner="bfd8e679-7660-4dcd-83bd-614fbd99b506")
mandate=models.ListMandate.objects.get(mandated=user1, permission=models.ListMandate.CAN_BUY_NEEDS, revoked_on=None)
shared_needs=models.Need.objects.filter(list=mandate.target)
needs = own_needs.union(shared_needs)
感谢您的启发!
【问题讨论】:
-
请注意,使用
needs = (own_needs | shared_needs).distinct()可以按预期工作。我怀疑Django的union()还是有点新鲜。
标签: django django-models django-queryset