Python Django-queryset.union返回损坏的queryset:filter()和get()返回所有内容

Python Django-queryset.union返回损坏的queryset:filter()和get()返回所有内容,python,django,django-queryset,Python,Django,Django Queryset,我使用queryset.union连接两个性质相同的queryset,但对结果使用.get()或.filter()时,效果不理想: >>>foo = obj1.father.all() >>>foo <QuerySet [<Link: l1>, <Link: l2>]> >>>foo.get(pk=0) <Link: l1> >>>bar = foo.union(obj2.fa

我使用
queryset.union
连接两个性质相同的queryset,但对结果使用
.get()
.filter()
时,效果不理想:

>>>foo = obj1.father.all()
>>>foo
<QuerySet [<Link: l1>, <Link: l2>]>
>>>foo.get(pk=0)
<Link: l1>
>>>bar = foo.union(obj2.father.all())
>>>bar
<QuerySet [<Link: l1>, <Link: l2>], <Link: l3>], <Link: l4>]>
>>>bar.filter(pk=0)
<QuerySet [<Link: l1>, <Link: l2>], <Link: l3>], <Link: l4>]>
>>>[l.pk for l in bar]
[0, 1, 2, 3]
如中所述,只允许对union queryset进行count()、order_by()、values()、values_list()和切片。无法在联合查询集上进行筛选


这意味着,在对查询应用union之前,必须对查询应用筛选器。

为什么不
Link.objects.filter(child_uuin=[obj1,obj2])
?@WillemVanOnsem,因为我不知道我可以这么做,这很好!我最初的问题仍然代表着我的好奇心,为什么它不起作用?只允许提到count()、order_by()、values()、values_list()和union queryset的切片。无法在联合查询集上进行筛选。如果你需要过滤你的查询集,你需要在申请联合之前进行过滤。@Priya哦,我确信我读得很好,看起来我没有:(.谢谢,这就解释了。(虽然我觉得如果只允许这些,我就不可能使用其他人了…)
class Article(models.Model):
     name = models.CharField(max_length=255,
                        unique=True,
                        verbose_name = _("Name"),
                        help_text=_("Name of the article"))

class Link(models.Model):
    father = models.ForeignKey(Article, related_name="father", on_delete=models.CASCADE)
    child = models.ForeignKey(Article, related_name="child", on_delete=models.CASCADE)