【问题标题】:django subquery with a join in it带有连接的 django 子查询
【发布时间】:2015-11-03 00:40:11
【问题描述】:

我有 django 1.8.5 和 Python 3.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)

我正在过滤 Discrete 的各种属性(即离散供应),并且我想通过 Lot,在 Lot_Country 上“向上”,这意味着“如果与该行关联的 Lot 有,我只想从 Discrete 获取行在 Lot_Country 中为我的相应国家/地区(比如美国)输入。

我尝试过这样的事情:

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

但是,首先,这让我得到了 str,这是我并不真正想要的(并将其更改为 lot_id,但这是一个 hack。)

限制离散通过 Lot 到 Lot_Country 的最佳方法是什么?在 SQL 中,我将只加入子查询(甚至在主查询中 - 也许这就是我需要的?我想我不知道如何加入父母然后再加入该父母的另一个孩子......)

提前感谢您的帮助。

【问题讨论】:

    标签: django join subquery


    【解决方案1】:

    我不确定您所说的“它给了我 str ”是什么意思...Lot_Country.objects.filter(country='US') 将返回一个查询集。当然,如果你在控制台打印它,你会看到一个字符串。

    我还认为您的模型需要重构。按照你目前定义的方式,可以将多个Lot_Countrys与oneLot相关联,而一个国家只能与一个相关联强>很多。

    如果我正确理解了您的一般模型,那不是您想要的 - 您希望将多个 Lots 与一个 Lot_Country 关联。为此,您需要反转外键关系(即,将其放在 Lot 中)。

    然后,要获取给定国家/地区的所有 Discrete 批次,您可以:

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

    这将为您提供所有Discretes 的查询集,其中Lot 在美国。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2014-02-07
      • 2020-03-31
      相关资源
      最近更新 更多