如何在Django ORM中将日期字段与“无”进行比较?

时间:2020-05-04 09:42:34

标签: python django django-models django-views django-orm

我有一个模型,其中有一个“日期”字段。

我正在尝试通过传递日期对象或空值来查询模型。

根据ORM查询提供的输入,查询应以不同的方式运行。

我将向ORM查询st_dateexp_date传递两个变量。 exp_date有时可以为None。

如果exp_date中有某些值,我需要查询模型并获取所有scheduled_end_date大于提供的exp_date的记录。如果不是,则根本不考虑过滤器。

models.py:

class DtModel(models.Model):
    scheduled_start_date = DateField()
    scheduled_end_date = DateField()

ORM查询:

st_date="2020-05-01"
exp_date=None
DtModel.objects.filter(scheduled_start_date__gte=st_date, scheduled_end_date__lte=exp_date)

exp_date尝试比较Nonedate field时,如果 telemetryClient.TrackEvent(Names.FileDownload, new Dictionary<string, string>() { {PropertyKeys.ProjectName, project.ProjectName}, {PropertyKeys.ProjectUri, project.ProjectUri}, {PropertyKeys.IsLocal, isLocal.ToString() }, {PropertyKeys.FileSize, fileSize?.ToString() }, }); 为null会抛出错误?

ValueError:不能将None用作查询值

2 个答案:

答案 0 :(得分:1)

为什么要查询空值... 如果“无”表示您要过滤maxNameSize而不是x > date,则只需使用较大的日期值即可。

x > date and < date

答案 1 :(得分:0)

在Django中,不能使用None作为查询值。要过滤具有空值的行,必须使用scheduled_end_date__isnull=True。根据您对@SakuraFreak的回答的评论,以下内容应该有效

st_date="2020-05-01"
exp_date=None
if exp_date:  # Apply filter only if exp_date is not null
    DtModel.objects.filter(scheduled_start_date__gte=st_date, scheduled_end_date__lte=exp_date)