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



我使用queryset.union连接两个性质相同的查询集,但对结果使用.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(( 以外的其他东西来连接查询集吗?我应该怎么做?

我 models.py:

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)

如 django 文档中所述,只允许对联合查询集进行 count((、order_by((、values((、values_list(( 和切片。不能按联合查询集进行筛选。

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

最新更新