Как включить одно и то же отношение модели "parent" в фильтр набора запросов django - PullRequest
0 голосов
/ 04 августа 2020

У меня такой сценарий:

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

Я могу сгладить результат и получить идентификатор и выполнить второй запрос для любого родителей и объединить два набора запросов.

, но могу ли я сделать это в одном go с помощью функции фильтра Q?

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете попробовать это с помощью Q:

from django.db.models import Q

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

Или, если вы используете related_name в отношении ForeignKey, ie: parent = models.ForeignKey(People, related_name="children"), затем:

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