【问题标题】:keyword can't be an expression in django model query关键字不能是 django 模型查询中的表达式
【发布时间】:2015-01-12 00:24:55
【问题描述】:

我有一个带有 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 派生日期,并将其与表单中的 Date 字段进行比较:

Model.objects.filter(start_date.date() = start_date)

并得到一个错误:“关键字不能是表达式”,我明白为什么 - 因为:

start_date.date()

但不知道如何处理它,如果我只需要按 DateTime 的日期部分进行过滤。我也试过了:

start_date_date

遇到同样的错误

【问题讨论】:

  • 我不明白你在做什么...start_date_date.date() 应该是什么?我假设您在视图中执行此操作,您的视图是什么样的?
  • @Ngenator 很抱歉不清楚,我编辑了我的帖子以更清楚。

标签: django filter model


【解决方案1】:

如果DateTimeField 按日期过滤,您可以这样写:

Model.objects.filter(
  start_date__year=dateobj.year,
  start_date__month=dateobj.month,
  start_date__day=dateobj.day
)

【讨论】:

    【解决方案2】:

    我想你想知道如何使用表达式作为命名参数的关键字。通过创建一个字典(您可以在其中使用表达式作为键)然后将其放入方法参数中来做到这一点:

    kwargs = {
        start_date_date.date(): start_date
    }
    Model.objects.filter(**kwargs)
    

    但您的问题并不完全清楚,因为start_date_date.date() 似乎无论如何都是错误的。

    【讨论】:

    • 感谢您的帮助,我认为它会起作用,我编辑了我的帖子以使其更加清晰。
    猜你喜欢
    • 2013-06-04
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多