【问题标题】:Django: How can I filter a user input date with a DateTimeField DB in Django passing the filter options as dictionary?Django:如何在 Django 中使用 DateTimeField DB 过滤用户输入日期,并将过滤器选项作为字典传递?
【发布时间】:2016-09-02 05:06:48
【问题描述】:

我有搜索选项,用户从前端输入。

search = {"Date":"2016-02-07","Status":"pass" }

然后我将这些值与 DB 中的列名进行映射。

query_to_field_mapping = {"Date": "date","Status": "result"}

query = {query_to_field_mapping[key]: value for key, value in search.items()}

现在我在数据库中有 DateTimeField。当我使用过滤器时,我正在尝试以下一个:

result = Customer.objects.filter(**query)

我正在尝试根据日期字段进行过滤,并且也希望获得过滤后的记录。我尝试了同样的方法,但没有成功。我该如何继续?

任何帮助都会很棒!!!

我尝试了来自 SO 的其他问题:How can I filter a date of a DateTimeField in Django?

我无法解决我的问题,因为我们正在通过 1 传递列名。但现在我作为字典传递。

【问题讨论】:

  • “我尝试了同样的方法但没有成功” - 你尝试了什么?
  • 试过 ORM result = Customer.objects.filter(**query)
  • 请参阅Parsing a Datetime String into a Django DateTimeField。您需要将 datetime 对象而不是日期字符串传递给查询。
  • 试试query_to_field_mapping = {"Date": "date__contains","Status": "result"}。很可能是因为您的日期时间字段包含包括时间在内的值,但是当您搜索时,您只提供了一个日期字符串(没有时间),因此 2016-02-07(您的查询参数)不等于 2016-02-07T12:32:22(一个可能的值在数据库中)
  • @iulian 非常感谢。你节省了我的时间。请回答问题。我会标记为正确答案

标签: python django django-models django-queryset


【解决方案1】:

您的方法是正确的。它不起作用的原因是因为您通过提供date 字符串来过滤datetime 字段的相等性,因此2016-02-07 日期(您的查询参数)不等于2016-02-07T12:32:22(可能的值在数据库)。

要克服这种情况,请使用您自己问题链接中的一种字段查找可能性。作为一个具体的例子,让我们使用contains 字段查找,如下所示:

query_to_field_mapping = {"Date": "date__contains","Status": "result"}

因此,当将query_to_field_mapping 传递给.filter() 时,它将在您需要的日期时间内查找日期。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2010-12-15
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2020-04-27
    • 2022-11-05
    相关资源
    最近更新 更多