我有一个模型,其中有一个“日期”字段。
我正在尝试通过传递日期对象或空值来查询模型。
根据ORM查询提供的输入,查询应以不同的方式运行。
我将向ORM查询st_date
和exp_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
尝试比较None
和date 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用作查询值
答案 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)