django queryset中的日期时间和日期比较

时间:2011-05-18 05:16:03

标签: django forms datetime

您好我有一个用户输入表格,其格式为2011-05-12格式。我想使用Q查询结果。但我的数据库字段采用日期时间格式,如2011-05-18 08:36:34。我正在给出这样的查询

k = Posts.objects.filter(Q(review_email__contains = user), review_time = datetime(date))其中user是一些用户名,date是表单inputvalue

如果我执行上述查询,我​​将收到以下错误

Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: 'module' object is not callable

有人可以帮助我解决这个问题。提前致谢

3 个答案:

答案 0 :(得分:7)

错误来自于不执行datetime.datetime,但是一旦解决了这个问题,您的查询就会遇到错误的结果。当您将datetime.date强制转换为datetime.datetime对象时,它将在午夜。因此,只有当天午夜创建的Posts才会匹配。

你应该这样做:

Post.objects.filter(
     review_email__contains = user, 
     review_time__year=date.year, 
     review_time__day=date.day, 
     review_time__month=date.month,
 )

有关详细信息,请参阅queryset reference

另外,您不需要在此使用Q对象。

答案 1 :(得分:0)

正如错误所示, 'module'对象不可调用datetime是一个模块。你想要的是datetime.datetime

使用:

k = Posts.objects.filter(Q(review_email__contains = user), review_time = datetime.datetime(date))

答案 2 :(得分:0)

如果您只想比较日期,可以试试这个

  

k =   Posts.objects.filter(Q(review_email__contains   = user),review_time__date = datetime(date).date())