2011-03-25 52 views
0

直到几天前,我一直在使用以下查询成功。下面的查询始终返回它应该返回数据:Django: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和工作!

所以我的问题是:有没有人有过这个问题之前?任何人都可以在我的代码中看到我缺少的东西?有关更多解决方法的任何建议?我感谢你的时间。

+0

我认为这实际上是一个损坏的数据库数据的问题。这个查询太简单了,不行,今天我会去查看它。 – dm03514 2011-03-25 15:41:08

+0

从你的sql shell或者使用python/django代码中的原始sql,你能写一个简单的查询来检索这个日期项吗? – 2011-03-25 15:57:54

+0

还有一个想法,也许问题是你的语言环境 - 当你有字符串(不是日期对象)系统语言环境很重要 – Jerzyk 2011-03-25 18:27:56

回答

1

为什么要转换为字符串?你不能控制日期如何转换,例如。区域设置问题。

开关date对象,并只在视图中设置:

report_date = date.today() 

,并得到数据从表单的cleaned_data字典:

report_date = form.cleaned_data['date'] 
+0

谢谢,这是更好的做法,我已经尝试了日期对象和字符串。 – dm03514 2011-03-25 15:48:04

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 ... 

因为视图参数,再次,是当视图定义,而不是在执行其评估,因此,该值将保持只要过程存在就一样。

+0

http://docs.djangoproject.com/en/dev/ref/models/fields/#default如果模型属于这种情况,您可以传递该函数而不是调用它。 '默认= datetime.date.today' – DTing 2011-03-26 09:42:32