Django:Django QuerySet,日期SELECT工作不正常

时间:2011-03-25 14:36:53

标签: python django date django-queryset

直到几天前,我一直在成功使用以下查询。以下查询始终返回它应该返回的数据:

try:
  totals = MyObject.objects.get(date=report_date)
except MyObject.DoesNotExist:
  return HttpResponse('Could not find totals from %s' % (report_date))

几天前,这个查询开始返回一个空的QuerySet,即使数据确实存在于我请求的那一天。

我从report_date = date.today().strftime('%Y-%m-%d')获取日期 或者来自表格

if request.method == 'POST':
  form = DateForm(request.POST)
  if form.is_valid:
    report_date = request.POST['date']

模型是简单的datefield()

class MyObject(models.Model):
  """Total numbers for a specific day"""
  date = models.DateField()
  ... remaining fields ...

我已经通过shell验证了TotalTransactions中今天的日期数据。我已经使用这个代码几个月没有问题。我昨天通过查询做了一个工作 totals = MyObject.objects.get(date__gte=report_date, date__lte=report_date) 但今天早上它不再有效!今天早上我尝试了date=report_date的原始查询,并且有效!

所以我的问题是:有人之前有过这个问题吗?任何人都可以在我的代码中看到我缺少的东西吗?有关更多变通办法的任何建议吗?我很感激你的时间。

2 个答案:

答案 0 :(得分:1)

为什么转换为字符串?你无法控制日期的转换方式,例如。现场问题。

切换到date个对象并仅在视图中设置:

report_date = date.today()

并从表单cleaned_data dict获取数据:

report_date = form.cleaned_data['date']

答案 1 :(得分:0)

基于日期的查询在某一天工作但在下一天不工作这一事实具有启发性。我怀疑 - 虽然你没有显示足够的代码来确定 - 你无意中在某个地方设置了一些默认值,这些默认值会在请求中保持不变。

例如,如果你这样做:

class MyModel(models.Model):
    my_date_field = model.DateField(default=datetime.date.today())

在服务器进程启动时评估字段默认值,并且只要进程正在运行,它就会保持不变 - 可以是几天或几周。

如果您在视图中执行此操作,情况也是如此:

def my_view(request, date=datetime.date.today()):
    ... do something with date ...

因为视图参数在定义视图时被评估,而不是在执行视图时被评估,因此只要进程存在,值就会保持不变。