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

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

在 Django 中過濾時如何忽略或跳過表的空值?

在 Django 中過濾時如何忽略或跳過表的空值?

慕沐林林 2023-08-08 10:52:48
當數據庫中該子句的數據為空時,我想忽略或跳過該子句,在我的情況下,有時 digital_exp_score 變量為空,但我需要按該變量進行過濾,正常的過濾器將如下所示:review = Review.objects.get(id=review_id)offers = OfferGeneric.objects.filter(                is_personalized=True,                digital_exp_score__gte=review.digital)但是當 digital_exp_score 為 Null 時,它不起作用,我想忽略這些情況并通過該條件,我該怎么做?我嘗試過 When 子句:offers = OfferGeneric.objects.filter(                is_personalized=True,                When(digital_exp_score__isnull=False ,                     then=(digital_exp_score__gte=review.digital)                     ),)和offers = OfferGeneric.objects.filter(                is_personalized=True,                digital_exp_score__gte=When(                    digital_exp_score__isnull=False,                    then=review.digital                ),)但兩者都不起作用,我收到語法錯誤,這些方法僅適用于條件右側的值?有什么方法可以檢查條件左側的值(DB值)?像這樣的東西是理想的:offers = OfferGeneric.objects.filter(                is_personalized=True,                digital_exp_score__gte=review.digital if digital_exp_score is not None else pass)
查看完整描述

2 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

您可以使用Q對象 [Django-doc]來編碼析取。a → b的邏輯等價是← a ∨ b

from django.db.models import Q


review = Review.objects.get(id=review_id)


offers = OfferGeneric.objects.filter(

? ? Q(digital_exp_score=None) |

? ? Q(digital_exp_score__gte=review.digital),

? ? is_personalized=True,

)

digital_exp_score或者我們可以簡單地過濾掉不小于 review.digital NULL` 本身的對象. Django will then automatically include :


from django.db.models import Q


review = Review.objects.get(id=review_id)


offers = OfferGeneric.objects.filter(

? ? ~Q(digital_exp_score__lt=review.digital),

? ? is_personalized=True,

)

這里波浪號 ( ~) 是條件的否定。


查看完整回答
反對 回復 2023-08-08
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

我想這樣就可以了

OfferGeneric.objects.exclude(digital_exp_score__isnull=true) \
                    .filter(is_personalized=Treu,digitial_score__gte=review.digital)

雖然我想它會與您的其他查詢一起使用...因為我不認為 NULL 會通過大于測試...也許我誤解了您想要做什么

根據您的評論,正確的查詢是

from django.models import Q
OfferGeneric.objects.filter(Q(OfferGeneric.digital_score__gte=review.digital) | 
                            Q(OfferGeneric.digital_score__isnull=True)).all()


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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