Django получает все Модели со связанной с ними Моделью

Здравствуйте, в настоящее время я пытаюсь изучить Django. Как я могу написать запрос, чтобы получить все экземпляры Person, которые имеют связанный существующий экземпляр Form. Например:

Вот мои модели:

class Person(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)

class Form(models.Model):
    filled_by = models.ForeignKey(Person, on_delete=models.CASCADE)

У меня есть следующие объекты Person

  • PersonA: {id: 1, имя: 'Will'}
  • PersonB: {id: 2, name: 'Greg'}
  • PersonC: {id: 3 имя: 'Dan'}

И следующие объекты Form

  • Форма1: {заполнено_было: PersonA}
  • Форма2: {заполнено_было: PersonC}

Запрос должен вернуть PersonA и PersonC

Не внося никаких изменений в ваши модели, вы можете сделать запрос для фильтрации лиц, у которых есть X id, используя filled_by_id из каждой имеющейся у вас формы;

Person.objects.filter(id__in=Form.objects.values_list("filled_by_id", flat=True))

На языке SQL это будет выглядеть примерно так;

select *
from person
where person.id in (select filled_by_id from form)

Вы также можете попробовать выполнить запрос с внутренним соединением, используя select_related, но вам придется обновить filled_by в Form, чтобы указать, как называется отношение к модели Person.

См. select_related и ForeignKey.related_name.

Вернуться на верх