我有一个属性为start_date的模型:
start_date = models.DateTimeField('Start date')
带有字段的表单
start_date = forms.DateField(widget= DateWidget(attrs={'id':"start_date"},usel10n = True, bootstrap_version=3, options = dateTimeOptions))
我希望按表单字段" start_date"过滤我的模型,因此我需要从模型中的DateTime字段中仅检查日期(表单中的start_date)。为此,我尝试从我的视图中的DateTime派生日期,并通过这样做将其与表单中的日期字段进行比较:
Model.objects.filter(start_date.date() = start_date)
并收到错误:"关键字不能成为表达式",我明白为什么 - 因为:
start_date.date()
但是我不知道如何处理它,如果我只需要按DateTime的日期部分过滤。我也尝试过:
start_date_date
得到同样的错误
答案 0 :(得分:1)
如果DateTimeField
按日期过滤,您可以编写如下内容:
Model.objects.filter(
start_date__year=dateobj.year,
start_date__month=dateobj.month,
start_date__day=dateobj.day
)
答案 1 :(得分:0)
我想您想知道如何将表达式用作命名参数的关键字。通过创建一个字典(您可以在其中使用表达式)来执行此操作,然后将其splat到方法参数中:
kwargs = {
start_date_date.date(): start_date
}
Model.objects.filter(**kwargs)
但你的问题并不完全清楚,因为start_date_date.date()
似乎错了。