Django 过滤器:过滤隐藏在多层模型结构中的对象

Django FIlter: Filtering object hidden in multi layered model structure

我有以下django模型关系:

class Project(models.Model):
    pass 
class Vehicle(models.Model):
    project=ForeignKey(Project) 
class Concept(models.Model):
    vehicle=ManyToManyField(Vehicle) 
class Analysis(models.Model):
    concept=ForeignKey(Concept)

我想整理出所有连接到具有已知 ID 的项目的 Analyzes 对象。 概念可以用于不止一辆车,但一个概念中的所有车辆将仅限于一个项目。 或者我应该向所有以下模型添加一个带有项目字段的外键?

谢谢

您可以 .filter(…) [Django-doc] 使用:

Analysis.objects.filter(<b>concept__vehicle__project_id=<i>project_id</i></b>)

一个 Concept 有可能有许多 Vehicle 指向同一个 Project,在这种情况下 Analysis 将被复制。您可以使用 .distinct() [Django-doc] 来防止这种情况:

Analysis.objects.filter(<b>concept__vehicle__project_id=<i>project_id</i></b>)<b>.distinct()</b>

Note: Since a ManyToManyField refers to a collection of elements, ManyToManyFields are normally given a plural name. You thus might want to consider renaming vehicle to vehicles.