django QuerySet для родителей хотя бы с одним ребенком - PullRequest
0 голосов
/ 12 июня 2018

У меня есть отношения один-на-один, например:

class Adult(models.Model):
    name = models.CharField(max_length=200)

class Child(models.Model):
    name = models.CharField(max_length=200)
    adult = models.ForeignKey(Adult)

И я пытаюсь найти способ получить QuerySet для взрослых, у которых есть хотя бы один ребенок, и затем применить фильтры кэтот QuerySet.В SQL, чтобы получить список идентификаторов для взрослых, у которых есть хотя бы один ребенок, я могу просто сделать это:

select distinct(child.adult_id) from child;

Но, пытаясь сделать то же самое в django, у меня возникают проблемы.Я пробовал такие вещи, как следующие, с некоторыми изменениями:

adult_ids = Child.objects.values_list('adult__id').distinct()
adults_with_children = Adult.objects.filter( id__in=adults )

, но я продолжаю генерировать SQL-запрос, который включает в себя соединение со взрослой таблицей в первой строке.Как я могу найти взрослых, у которых есть хотя бы один ребенок, быстрее / лучше?Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Вы пробовали это,

adults_with_alteast_one_child = Adult.objects.filter(child__isnull=False)

Это исключит всех Adults, которые имеют пустое отношение с Child.

Для получения дополнительной информации читайте isnull

...