python - Django 时区过滤器返回错误结果
问题描述
我写了以下代码:
date = self.request.query_params.get('date')
queryset = Fixture.objects.all().order_by('-date')
if(date):
date = pytz.utc.localize(datetime.strptime(date, "%Y-%m-%d")).astimezone(pytz.UTC)
queryset = Fixture.objects.filter(date__date=date).order_by('date')
使用查询集执行此操作后,date = "2020-09-02"
将返回包含日期“2020-09-03”的值。这是怎么发生的,如何解决?
解决方案
如果您想使用日期,为什么要先将其设为日期时间?您的解析可以简化。
date = self.request.query_params.get('date')
queryset = Fixture.objects.all().order_by('-date')
if date:
date = datetime.strptime(date, "%Y-%m-%d").date()
queryset = Fixture.objects.filter(date__date=date).order_by('date')
但是这种解析对错误插入的数据也很敏感,你会得到一个错误。最佳实践 imo 将使用 DateField 创建一个简单的表单。
class ParseDateForm(forms.Form):
date = forms.DateField()
# This somewhere in a method
form = ParseDateForm(data=self.request.query_params)
queryset = Fixture.objects.all().order_by('-date')
if form.is_valid():
date = form.cleaned_data['date']
queryset = Fixture.objects.filter(date__date=date).order_by('date')
推荐阅读
- php - 在单个 Elastic Beanstalk 环境中运行多个 PHP 网站
- r - 从 ggplots 列表中设置常见的 y 轴范围
- spring - 在 spring boot 2.3.1.RELEASE 中是否禁用了 data.sql?
- selenium - Jsoup 从一开始只获取几行 HTML,甚至不到 25%
- python - 如何让所有的海龟同时移动
- javascript - 如何在角度 ag 网格中显示子数组
- javascript - 如何在不使用开关的情况下返回值,如果在 javascript 中使用 else
- mysql - 如何避免 Mariadb Galera 中的 SST
- angular - 角度全局函数在悬停时返回 elementId
- javascript - 响应 css 更新样式 onclick