2016-11-23 67 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