Django FIlter: Фильтрация объектов, скрытых в многослойной структуре модели

У меня есть следующие отношения модели django:

model Project():

model Vehicle():
   ForeignKey(Project)

model Concept():
   ManyToManyField(Vehicle)

model Analysis():
   ForeignKey(Concept)

Я хочу отсортировать все объекты Analyses, которые связаны с проектом с известным идентификатором. Концепция может быть для более чем одного автомобиля, но все автомобили в рамках концепции будут ограничены только одним проектом. Или я должен просто добавить ко всем следующим моделям внешний ключ с полем проекта?

Спасибо

Вы можете .filter(…) [Django-doc] с:

Analysis.objects.filter(concept__vehicle__project_id=project_id)

It is possible that a Concept has many Vehicles that point to the same Project, and in that case the Analysis will be duplicated. You can use .distinct() [Django-doc] to prevent this:

Analysis.objects.filter(concept__vehicle__project_id=project_id).distinct()

Примечание: Поскольку ManyToManyField относится к коллекции элементов, ManyToManyField обычно дается имя множественного числа . Таким образом, вы можете захотеть рассмотреть возможность переименования vehicle в vehicles.

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