加入不相关的模型并过滤查询集
Joining unrelated models and filter the queryset
我想加入以下模特:
Datapoint
class Datapoint(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
composition = models.ForeignKey(Composition, models.DO_NOTHING, db_column='Composition', blank=True, null=True) # Field name made lowercase.
value = models.IntegerField(db_column='Value') # Field name made lowercase.
Composition
class Composition(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase.
DataComponent
class Datacomponent(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
composition = models.ForeignKey(Composition, models.DO_NOTHING, db_column='Composition_ID', null=True, blank=True) # Field name made lowercase.
components = models.ForeignKey(Components, models.DO_NOTHING, db_column='Components_ID') # Field name made lowercase.
componentvalue = models.FloatField(db_column='ComponentValue') # Field name made lowercase.
最后,Component
class Components(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase.
每个数据点都包含一个组合 table 的外键。 Datapoint
和 Composition
table 因此是相关的。每个组合都有许多组件,这些组件由 Datacomponent table 中的组合字段链接,其中还包含组件 table.
的组件外键
最终目标是在 Datacomponents table.
中构建一个由特定组件值过滤的 Datapoint 对象列表
例如,假设我们有许多数据点。如果我们只有 2 个组合 A 和 B。A 包含 2 个元素 AA 和 BB,其值分别为 30 和 50。 B 包含 3 个元素 AA BBB 和 CC,其值分别为 40、50 和 60。此场景中的一个示例查询是 - 获取组件 AA 值大于 30 的所有数据点。
由于Datacomponent 与Datapoint 没有直接关联,我不确定如何结合这两个模型。目前我正在尝试在 tastypie
库的 get_object_list
中构建它。
非常感谢任何帮助。
您可以通过任意多个级别来跟踪关系。请记住始终从您需要的 class 对象开始。对于您的示例查询,它看起来像:
Datapoint.objects.filter(
composition__datacomponent__component_value__gte=30,
composition__datacomponent__components__name='AA'
)
我想加入以下模特:
Datapoint
class Datapoint(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
composition = models.ForeignKey(Composition, models.DO_NOTHING, db_column='Composition', blank=True, null=True) # Field name made lowercase.
value = models.IntegerField(db_column='Value') # Field name made lowercase.
Composition
class Composition(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase.
DataComponent
class Datacomponent(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
composition = models.ForeignKey(Composition, models.DO_NOTHING, db_column='Composition_ID', null=True, blank=True) # Field name made lowercase.
components = models.ForeignKey(Components, models.DO_NOTHING, db_column='Components_ID') # Field name made lowercase.
componentvalue = models.FloatField(db_column='ComponentValue') # Field name made lowercase.
最后,Component
class Components(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
name = models.CharField(db_column='Name', max_length=45, blank=True, null=True) # Field name made lowercase.
每个数据点都包含一个组合 table 的外键。 Datapoint
和 Composition
table 因此是相关的。每个组合都有许多组件,这些组件由 Datacomponent table 中的组合字段链接,其中还包含组件 table.
最终目标是在 Datacomponents table.
中构建一个由特定组件值过滤的 Datapoint 对象列表例如,假设我们有许多数据点。如果我们只有 2 个组合 A 和 B。A 包含 2 个元素 AA 和 BB,其值分别为 30 和 50。 B 包含 3 个元素 AA BBB 和 CC,其值分别为 40、50 和 60。此场景中的一个示例查询是 - 获取组件 AA 值大于 30 的所有数据点。
由于Datacomponent 与Datapoint 没有直接关联,我不确定如何结合这两个模型。目前我正在尝试在 tastypie
库的 get_object_list
中构建它。
非常感谢任何帮助。
您可以通过任意多个级别来跟踪关系。请记住始终从您需要的 class 对象开始。对于您的示例查询,它看起来像:
Datapoint.objects.filter(
composition__datacomponent__component_value__gte=30,
composition__datacomponent__components__name='AA'
)