我正在使用Django 2.0,并遇到从两个查询集的union()生成的查询集needs
遇到的奇怪问题:
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是正确的吗?
我的模型没有太多困扰你,这就是我生成needs
查询集的方法:
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)
感谢您的启发!
答案 0 :(得分:0)
联盟可能会导致重复。尝试将distinct
与结果queryset
一起使用。
needs = own_needs.union(shared_needs).distinct()