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обычно дается имя множественного числа . Таким образом, вы можете захотеть рассмотреть возможность переименованиявvehiclevehicles.