加入不相关的模型并过滤查询集

时间:2016-11-23 08:38:04

标签: django django-models tastypie

我想加入以下型号:

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.

每个数据点都包含组合表的外键。因此,DatapointComposition表是相关的。每个组合都有许多组件,它们通过Datacomponent表中的组合字段链接,该表还包含组件表的组件外键。

最终目标是构建一个Datacoint对象列表,该列表由Datacomponents表中的特定组件值过滤。

例如,假设我们有许多数据点。如果我们只有2个组合物A和B. A包含2个元素AA和BB,其值分别为30和50。 B包含3个元素AA BBB和CC,其值分别为40,50和60。此场景中的一个示例查询是 - 获取组件AA值超过30的所有数据点。

由于Datacomponent没有与Datapoint直接链接,我不知道如何组合这两个模型。目前,我正在尝试在get_object_list tastypie库中构建此功能。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您可以根据需要跟踪关系。请记住始终从您需要的对象的类开始。对于您的示例查询,它看起来像:

Datapoint.objects.filter(
    composition__datacomponent__component_value__gte=30,
    composition__datacomponent__components__name='AA'
)
相关问题