在将字符串转换为datetime之后,Django按datetime过滤

时间:2014-10-17 22:38:18

标签: python django datetime django-views

我正在尝试按日期时间过滤我的查询。此日期时间是客户想要了解其信息的值范围的日期时间。我正在尝试将其设置为客户选择的第一个月。我传递月份数将其转换为正确的字符串格式,然后转换为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))

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

2 个答案:

答案 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))