Django - queryset.union возвращает неработающий queryset: filter () и get () возвращают все - PullRequest
0 голосов
/ 01 июня 2018

Я использую 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)
...