我目前正在开发一个 django 项目,其中我想在 django 模型中添加 create_at 和 Updated_at 字段,我已经使用
auto_now
和 auto_now_add
完成了该部分,并将两者设置为 true,并且在我的 sqlite 数据库中完全节省了时间。
但是当我从数据库检索时间时,问题就出现了,它正确地显示了我的时间,但不是根据我的本地时区。即使我已经在我的settings.py中进行了这样的设置
TIME_ZONE = 'Asia/Karachi'
但我想保持我的观点和数据库的一致性。现在要根据当地时区尝试的是:
>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2024, 1, 4, 7, 35, 4, 879169, tzinfo=datetime.timezone.utc)
>>> timezone.localtime()
datetime.datetime(2024, 1, 4, 12, 38, 39, 129903, tzinfo=zoneinfo.ZoneInfo(key='Asia/Karachi'))
>>> from customAuth.models import OTP
>>> record = OTP.objects.first()
>>> record
<OTP: [email protected]>
>>> timestored = record.timeout
>>> timestored
datetime.datetime(2024, 1, 3, 17, 14, 28, 51644, tzinfo=datetime.timezone.utc)
>>> timezone.localtime(timestored)
datetime.datetime(2024, 1, 3, 22, 14, 28, 51644, tzinfo=zoneinfo.ZoneInfo(key='Asia/Karachi'))
>>> timezone.localtime(timestored.time())
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\DELL\Documents\Django-Learn-Math\DjangoLearnMathProject\venv\Lib\site-packages\django\utils\timezone.py", line 183, in localtime
raise ValueError("localtime() cannot be applied to a naive datetime")
ValueError: localtime() cannot be applied to a naive datetime
>>> converted = timezone.localtime(timestored)
>>> converted
datetime.datetime(2024, 1, 3, 22, 14, 28, 51644, tzinfo=zoneinfo.ZoneInfo(key='Asia/Karachi'))
>>> converted.time()
DateTime.time(22, 14, 28, 51644)
>>>
现在指导我如何保持视图和数据库记录之间的一致性,以根据本地时区存储时间
这是 Django 中的正确行为,所有时间都存储在 UTC 中,如果您在设置文件中设置时区,Django 将自动向用户显示时区中的时间。这种机制是正确的,因此 SaaS 应用程序可以为不同时区的用户或用户在不同时区之间跳转时提供服务。
有关更多信息,请查看 Django 帮助