我想忽略或跳过一个筛选子句,当该子句的数据在数据库中为空时,在我的情况下,有时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_分数为空时,它将不起作用,我想忽略这些情况,只是通过那个条件,我如何做到这一点
我试过使用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
)
我想这就行了
虽然我想它会和你的另一个问题一起工作。。。因为我不认为NULL会通过大于测试。。。也许我误解了你的意图
根据您的评论,正确的查询是
可以使用^{} objects [Django-doc]对析取进行编码。a的逻辑等价性→ b是,-a∨ b:
或者我们可以简单地筛选出
digital_exp_score
不小于review的对象。digital. Django will then automatically include
NULL`本身:这里的tilde(
~
)是条件的否定相关问题 更多 >
编程相关推荐