2015-11-03 63 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。