【发布时间】:2012-02-14 18:12:54
【问题描述】:
您好,我有一个模型包含:
class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
recorded_on = models.DateField()
precipitation = models.FloatField(null=True, blank=True)
我有一个如下所示的表单:
class QueryForm(forms.Form):
precipitation = forms.BooleanField(label=ugettext_lazy('Precipitation'),)
startdate = forms.DateField(widget = widgets.AdminDateWidget, label=ugettext_lazy('Start Date'),)
enddate = forms.DateField(widget = widgets.AdminDateWidget, label=ugettext_lazy('End Date'),)
在我的views.py 中,我有一个表单视图和一个用于通过GET 收集数据的单独视图。这是第二个 view.py 的非常简化的版本:
def results(request):
if 'q' in request.GET:
...
startdate = request.GET.get('startdate', None)
enddate = request.GET.get('enddate', None)
data = MyModel.objects.filter(recorded_on__range = (startdate, enddate))
...
我在 GET 中的日期变量的格式为“YYYY-MM-DD”。
问题是查询引发了这个错误:
coercing to Unicode: need string or buffer, datetime.date found
处理我的日期格式以进行查询的最佳方法是什么?
【问题讨论】:
-
您的结果视图应该使用表单来验证 GET 数据。如果您从表单的已清理数据中获取 startdate 和 enddate,那么 Django 将负责转换为日期对象,并且您不会遇到任何日期格式问题。