是否有任何简单的方法来进行查询,如果它的所有子项(tradeleg)数量列的值都为零,它只返回父对象(交易)?
例如如果trade_1有五个孩子并且其所有子女的数量字段都有“0”值,则返回trade_1 .
例如如果trade_2有两个孩子且其中一个孩子的数量字段值为“1”,则不返回trade_2 .
我有这个型号:
class Trade:
name = models.CharField(
default='',
max_length=50,
blank=True,
null=True
)
date = models.DateField(
default=None,
blank=True,
null=True
)
class TradeLeg(models.Model):
trade = models.ForeignKey(
Trade,
on_delete=models.CASCADE
)
quantity = models.IntegerField(
default=0
)
我当前的查询:
trade = Trade.objects.filter(tradeleg__quantity = 0)
3 回答
嗨首先是Trade没有TradeLed的任何引用所以查询
trade = Trade.objects.filter(tradeleg__quantity = 0)
无效 .对于您想要的输出,您可以先按一些标准搜索交易,例如
并使用此交易对象来过滤TradeLeg对象,例如
当前查询保留所有
Trade
对象,如果其中任何相关的TradeLeg
对象的数量值为0.使用exclude您可以排除所有Trade
对象,其中任何相关TradeLeg
的数量值不是0:由于Amit注意到您当前的查询无效,因为
tradeleg
不是Trade
对象的属性 . 使用tradeleg_set__quantity__ne
或设置ForeignKey的related_name属性 .我找到了最合适的答案 . 我们可以使用annotate将虚拟列添加到父对象 . 那么我们现在可以从中过滤掉 .