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.