2015-11-03 65 views
0

我有Django 1.8.5和Python 3.4.3,並試圖創建一個約束我的主要數據集的子查詢 - 但子查詢本身(我認爲)需要一個加入它。或者也許有更好的方法來做到這一點。加入它的django子查詢

這裏有一個下調組模型:

class Lot(models.Model): 
    lot_id = models.CharField(max_length=200, unique=True) 

class Lot_Country(models.Model): 
    lot = models.ForeignKey(Lot) 
    country = CountryField() 

class Discrete(models.Model): 
    discrete_id = models.CharField(max_length=200, unique=True) 
    master_id = models.ForeignKey(Inventory_Master) 
    location = models.ForeignKey(Location) 
    lot = models.ForeignKey(Lot) 

我離散(這是離散供應)的各種屬性過濾和我想去「向上」,通過土地,在Lot_Country,意爲「我只是想從離散行是否與該行相關的地段在Lot_Country我適當的國家的入境(比方說美國)

我已經試過這樣的事情:

oklots=list(Lot_Country.objects.filter(country='US')) 

但是,首先,讓我海峽回來,我真的不希望的(並且改變它被lot_id,但是這是一個黑客。)

什麼是通過土地來約束離散的最佳途徑,到Lot_Country?在SQL中,我只是加入子查詢中(甚至在主查詢中 - 也許這就是我需要的嗎?我想我不知道如何加入父母,然後再加入父母的另一個孩子......)

在此先感謝您的幫助。

回答

0

我不確定你的意思是「它給我帶來了回報」...... Lot_Country.objects.filter(country='US')將返回一個查詢集。當然,如果你在控制檯上打印它,你會看到一個字符串。

我也認爲你的模型需要重構。當前已定義的方式,你可以用一個Lot關聯多個Lot_Country秒,一個國家只能有一個很多相關。

如果我正確理解您的一般模型並非您想要的 - 您想將多個Lot與一個Lot_Country關聯起來。要做到這一點,您需要將您的外鍵關係顛倒過來(即將其放入Lot)。

然後,取出所有的Discrete很多是在特定的國家,你會怎麼做:

discretes_in_us = Discrete.objects.filter(lot__lot_country__country='US') 

,這將給你所有DiscretesLot是美國的一個QuerySet。