【问题标题】:Problem with Django query on Elastic BeanstalkElastic Beanstalk 上的 Django 查询问题
【发布时间】:2021-09-13 07:54:34
【问题描述】:

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

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

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

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

谢谢大家。

【问题讨论】:

    标签: python django amazon-elastic-beanstalk


    【解决方案1】:

    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 %}
    

    【讨论】:

    • 感谢@noes1s 的回复。我按照您的建议使用TIME_ZONE 和USE_TZ 配置我的项目。但我不确定它在运行时是否正常工作。让我试试你的解决方案
    • 所以运行 python manage.py shell 并尝试代码但打印 datetime 的结果,以便您查看它是否与您的本地时间匹配。我更新了答案以显示在 shell 中测试的示例。
    • 哦,是的,我在这篇文章之前尝试过 Django shell。它工作正常。只是在 api 视图中返回错误的记录。这就是问题所在:(。顺便说一句,我使用了 Django rest 框架。
    • 您是在 AWS 实例上尝试 shell,还是在本地计算机上尝试 shell?因为那将是一个很大的不同。此外,Django Views 自己处理时区的时间格式,因此如果您在视图中看到的与您在 shell 中看到的不同,那么您可以在模板中进行一些时间转换。我会更新我的答案
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2015-10-01
    • 2020-01-14
    • 2020-11-25
    • 2020-12-31
    • 1970-01-01
    • 2017-12-30
    • 2019-08-11
    相关资源
    最近更新 更多