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,
ManyToManyField
s are normally given a plural name. You thus might want
to consider renaming vehicle
to vehicles
.
我有以下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,ManyToManyField
s are normally given a plural name. You thus might want to consider renamingtovehicle
vehicles
.