2014-10-17 380 views
0

我想通过日期时间过滤我的查询。此日期时间是客户想要了解其信息的值范围的日期时间。我试图将其设置到客户选择的月份的第一个月。我通过月份数将其转换为正确的字符串格式,然后转换为datetime对象,因为简单地寻找字符串对象是一个没有返回值和Django的文件说,你需要做的是这样的:Django过滤日期时间后,将字符串转换为日期时间

pub_date__gte=datetime(2005, 1, 30) 

代码:

if 'billing-report' in request.POST: 
     customer_id = int(post_data['selected_customer']) 

这是我用得到所选客户的日期和把它变成一个元组

if 'billing-report' in request.POST: 
    customer_id = int(post_data['selected_customer']) 
    selected_date = int(post_data['month']) 
    if selected_date < 10: 
     selected_date = '0'+str(selected_date) 
    year = datetime.now() 
    year = year.year 
    query_date = str(year) + '-' + str(selected_date) + '-01' 

    query_date_filter = datetime.strptime(query_date, "%Y-%m-%d") 


    compute_usages = ComputeUsages.objects.filter(customer_id = customer_id).filter(values_date = query_date_filter) 


django debug shows: datetime.datetime(2014, 10, 1, 0, 0) 
query_date looks like: 2014-07-01 before it is converted 

的代码。

没有错误,但没有数据返回

我用:

compute_usages = ComputeUsages.objects.filter(customer_id = customer_id).filter(values_date = datetime(query_date_filter)) 

这是造成错误。我很抱歉改变我的问题,因为它演变了,这就是为什么我重新包括我之前做的事情,所以这些评论是有道理的。

+0

'日期时间(..)'不是例如一个元组,'LEN()'将不起作用;它是'datetime'类的实例,例如'datetime.strptime()'类方法返回的类。尝试将'datetime'实例传递给'datetime()'会产生“无效整数”错误:'TypeError:需要一个整数(类型为datetime.datetime)' – jfs 2014-10-17 23:04:23

+0

谢谢@JFSebastian我只是想这样,因为以另一种方式传递不起作用。我恢复了原来的方式。但是没有数据仍然返回。 – 2014-10-17 23:09:15

+0

可能有*多个*问题。解决这个问题并不一定能解决所有问题。不要以这样的方式改变你的问题,例如@Daniel Roseman提供的现有答案不再有意义。 – jfs 2014-10-17 23:11:48

回答

1

花费一段时间探索查询过滤器设置日期时间(年,月,日)后,嗯,我来到那个Django不将其转换为一个中性的日期时间实现格式必须完全匹配。此外,我在数据库中的数据有年,日,月。

学习点:

你必须使用datetime()究竟如何在数据库Django不转换为中性格式和比较。我认为这就像写一个查询,并说to_date或to_timestamp在哪里数据库将采取您的格式,并将其转换为中性格式与数据库的其余部分进行比较。

这里是正确的方式

compute_usages = ComputeUsages.objects.filter(customer_id = customer_id).filter(values_date = datetime(year, day, selected_month)) 
1

几乎所有的代码都与您的问题无关。

我不明白你为什么打电话datetimequery_date。那就是已经是一个日期时间,就像你知道的那样,因为你之前把它转换成了一个与strptime一个。所以这是不需要任何更多的转换:

ComputeUsages.objects.filter(customer_id=customer_id).filter(values_date=query_date) 
+0

我已经尝试过两种方式,但另一种方式没有返回。但是,如果我取消日期时间过滤器,它会返回所有的值,如果我查看数据库日期时间im搜索的值存在。 – 2014-10-17 22:50:24

相关问题