关键字不能是django模型查询中的表达式

时间:2014-11-14 15:05:27

标签: django filter model

我有一个属性为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

得到同样的错误

2 个答案:

答案 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()似乎错了。