我正在尝试按日期时间过滤我的查询。此日期时间是客户想要了解其信息的值范围的日期时间。我正在尝试将其设置为客户选择的第一个月。我传递月份数将其转换为正确的字符串格式,然后转换为datetime对象,因为只是查找字符串对象没有返回任何值,Django的文档说你需要这样做:
pub_date__gte=datetime(2005, 1, 30)
代码:
if 'billing-report' in request.POST:
customer_id = int(post_data['selected_customer'])
这是我用来获取所选客户日期并将其变成tupple
的代码 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 :(得分:1)
几乎所有代码都与您的问题无关。
我不明白你在datetime
打电话query_date
的原因。那是已经一个日期时间,正如您所知道的那样,因为您之前已将其转换为strptime
的日期时间。因此,无需再进行任何转换:
ComputeUsages.objects.filter(customer_id=customer_id).filter(values_date=query_date)
答案 1 :(得分:1)
在花了一些时间探索将查询过滤器设置为日期时间(年,月,日)后,我意识到django没有将其转换为必须完全匹配的中性日期时间格式。我的数据库中的数据也有年,日,月。
学习要点:
你必须准确使用datetime()在数据库中的方式django不会转换为中性格式并进行比较。我假设它就像编写一个查询并说to_date或to_timestamp,其中db将采用您的格式并将其转换为中性格式以与db的其余部分进行比较。
这是正确的方法
compute_usages = ComputeUsages.objects.filter(customer_id = customer_id).filter(values_date = datetime(year, day, selected_month))