python - Elastic Beanstalk 上的 Django 查询问题
问题描述
我的 Django 查询遇到了问题。所以,我有一个这样的过滤器。
Discount.objects.filter(end_date__gte=date.today()) #end_date is DateField
它在我的本地主机上正常工作。但是,在我使用 Elastic Beanstalk 部署的服务器上,它仍然返回昨天的记录。而且,当我重新部署服务器(没有任何更改)时,它工作正常,昨天的记录已被过滤和隐藏。
我试过但找不到问题出在哪里。希望任何人都可以帮助我。
谢谢你们。
解决方案
Django 通常会为您处理视图上的时区,但在后端,您可能会遇到服务器时间与用户本地时间的时间差异(视图)
可以帮助的一件事是设置您的 django 时区 settings.py:
TIME_ZONE = 'America/Chicago'
USE_TZ = True
如果您仍然遇到本地时间与服务器时间不匹配的问题,您可以对时间进行一些翻译。
from django.utils import timezone
to_tz = timezone.get_default_timezone()
import datetime
Discount.objects.filter(end_date__gte=datetime.datetime.today().astimezone(to_tz))
通过运行在 shell 中测试: python manage.py shell
from django.utils import timezone
from app.models import Discount
to_tz = timezone.get_default_timezone()
import datetime
print(f"Today is: {datetime.datetime.today().astimezone(to_tz)}")
todays_discounts = Discount.objects.filter(end_date__gte=datetime.datetime.today().astimezone(to_tz))
for each in todays_discounts:
print(f"{each} date:{each.end_date}")
在模板中管理时区:
{% load tz %}
<!-- some html code here -->
Date: {{ context.object.end_date|timezone:"America/La_Paz" }}
或者
{% load tz %}
{% timezone "Europe/Paris" %}
Date: {{ context.object.date }}
{% endtimezone %}