2016-11-23 62 views
0

我有以下型号我想加盟:加入不相关的模型和过滤的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. 

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

最终目标是建立由Datacomponents表中的特定组件值过滤的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中构建这个。

任何帮助将不胜感激。

回答

1

你可以按照你喜欢的层次关注关系。记得始终从你需要的对象类开始。对于您的示例查询,它看起来像这样:

Datapoint.objects.filter(
    composition__datacomponent__component_value__gte=30, 
    composition__datacomponent__components__name='AA' 
) 
+0

不知道这是这么简单!非常感谢您的回答:) – javaCity

+0

还有一个问题,我有多个component__name,每个组件值必须大于或等于某个值(本例中为30)。由于所有的表格都将被连接,我怎样才能得到每个分量值都是30的组合的数据点? – javaCity