我得到了django 1.8.5和Python3.4.3,并试图创建一个约束我的主数据集的子查询--但是子查询本身(我认为)需要一个连接。或者有更好的方法来做。
下面是一组经过修剪的模型:
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'))但是,首先,这给了我str,我并不真正想要它(并将它改为lot_id,但这是一种黑客行为)。
通过抽签将离散约束到Lot_Country的最佳方法是什么?在SQL中,我只是加入子查询(甚至在主查询中)--也许这就是我所需要的?我想我不知道如何加入父母,然后进入父母的另一个孩子.)
提前谢谢你的帮助。
发布于 2015-11-03 02:39:38
我不知道你说的“它给我的回报”是什么意思。Lot_Country.objects.filter(country='US')将返回一个查询集。当然,如果您在控制台中打印它,您将看到一个字符串。
我也认为你的模型需要重构。按照当前定义它的方式,您可以将多个Lot_Country与one Lot相关联,并且一个国家只能与one lot相关联。
如果我正确地理解了您的一般模型,这不是您想要的--您希望将多个Lot与一个Lot_Country关联起来。要做到这一点,您需要反转您的外键关系(即,将其放入Lot中)。
然后,为了获取某个国家的所有Discrete批次,您可以这样做:
discretes_in_us = Discrete.objects.filter(lot__lot_country__country='US')这将为您提供所有Discretes的查询集,其Lot位于美国。
https://stackoverflow.com/questions/33489593
复制相似问题