亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django 查詢,僅當所有子列值為零時才返回

Django 查詢,僅當所有子列值為零時才返回

catspeake 2021-09-11 20:38:52
有沒有什么簡單的方法可以進行查詢,如果它的所有子對象(貿易腿)數量列的值都為零,則它只返回父對象(貿易)?例如,如果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 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

Trade如果任何相關TradeLeg對象的數量值為 0,您當前的查詢會保留所有對象。使用exclude您可以排除Trade任何相關的TradeLeg數量值為 0 以外的所有對象:

trade = Trade.objects.exclude(tradeleg__quantity__ne=0)

正如 Amit 指出的,您當前的查詢無效,因為tradeleg它不是Trade對象的屬性。使用tradeleg_set__quantity__ne或設置related_nameForeignKey的屬性。


查看完整回答
反對 回復 2021-09-11
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

我找到了最適合我的答案。我們可以使用 annotate 將虛擬列添加到我們的父對象。那么我們現在可以從中過濾。

trades = Trade.objects.annotate(total_quantity=Sum('tradeleg__quantity')).filter(total_quantity__lte=0)



查看完整回答
反對 回復 2021-09-11
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

嗨,第一件事是 Trade 沒有任何 TradeLed 參考,因此查詢trade = Trade.objects.filter(tradeleg__quantity = 0)無效。


對于您想要的輸出,您可以首先通過一些標準搜索交易,例如


trade = Trade.objects.filter(name = <some name>)

并使用此貿易對象過濾 TradeLeg 對象,例如


tradeleg = TradeLeg.objects.filter(trade = trade, quantity != 0)

if tradeleg:

    return None

else:

    return trade


查看完整回答
反對 回復 2021-09-11
  • 3 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號