首页 > 解决方案 > Elastic Beanstalk 上的 Django 查询问题

问题描述

我的 Django 查询遇到了问题。所以,我有一个这样的过滤器。

Discount.objects.filter(end_date__gte=date.today()) #end_date is DateField

它在我的本地主机上正常工作。但是,在我使用 Elastic Beanstalk 部署的服务器上,它仍然返回昨天的记录。而且,当我重新部署服务器(没有任何更改)时,它工作正常,昨天的记录已被过滤和隐藏。

我试过但找不到问题出在哪里。希望任何人都可以帮助我。

谢谢你们。

标签: pythondjangoamazon-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 %}

推荐阅读