【问题标题】:How to include same model relation "parent" in django queryset filter如何在 django 查询集过滤器中包含相同的模型关系“父”
【发布时间】:2020-11-24 09:30:41
【问题描述】:

我有这种情况:

class People(models.Model):
    name = models.CharField(max_length=200)
    age =...
    city=...
    ...
    parent = models.ForeignKey(People)

我正在构建一个搜索函数,它将用户的条件带入 Q 过滤器列表并返回结果的查询集。

如何让查询集包含每个有父母但父母不符合搜索条件的人的父母?

Example:
  Person A - 60 Years old
  Person B - 30 Years old - Parent A
  Person C - 30 Years old
  Person D - 40 Years old

  so now filtering on Age 30, I want the result to show:
  A,B,C since A is a parent of B, rather than just B & C

我可以展平结果并获取 id,然后对任何父母进行第二次查询并合并两个查询集。

但是有什么方法可以让我在 Q 过滤器功能中一次性做到这一点?

【问题讨论】:

  • 你想在parent里面过滤吗?
  • 我已经用一个例子更新了这个问题,如果这样更清楚?

标签: django django-models filter foreign-keys django-queryset


【解决方案1】:

你可以试试Q

from django.db.models import Q

People.objects.filter(Q(age=30) | Q(people__age=30))

或者如果你在ForeignKey关系中使用related_name,即:parent = models.ForeignKey(People, related_name="children"),那么:

people = People.objects.filter(Q(age=30) | Q(children__age=30))

【讨论】:

    猜你喜欢
    • 2019-10-08
    • 1970-01-01
    • 2016-01-08
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多