在Django中进行过滤时,如何忽略或跳过表的空值?

问题描述

当数据库中该子句的数据为空时,我想忽略或跳过该子句,在我的情况下,有时digital_exp_score变量为Null,但是我需要按该变量进行过滤,普通过滤器将像这样:

review = Review.objects.get(id=review_id)
offers = OfferGeneric.objects.filter(
                is_personalized=True,digital_exp_score__gte=review.digital
)

但是,当digital_exp_score为Null时,它将不起作用,我想忽略这些情况,只通过该条件,我该怎么做?

我尝试了“当”子句:

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
)
    

解决方法

我认为这会做到

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()
,

您可以使用Q objects [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 . Django will then automatically include NULL`本身的对象:

from django.db.models import Q

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

offers = OfferGeneric.objects.filter(
    ~Q(digital_exp_score__lt=review.digital),)

此处波浪号(~)是条件的否定

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...