如何使用使用迁移的 Django 模型将“没有时区的时间戳”更改为“带时区的时间戳”?

时间:2021-02-04 08:04:12

标签: python django postgresql django-models pgadmin

 class test(models.Model):
      mobile_last_login = models.DateTimeField()

我需要将“mobile_last_login”字段的“timestamp without time zone”更改为“timestamp with time zone”。

1 个答案:

答案 0 :(得分:0)

如果您在设置中设置了 DateTimeField,则无法向 USE_TZ = True 添加时区 - Django 以 UTC 存储日期时间,否则设置为天真的日期时间。如果设置了 USE_TZ,那么 Django 会自动应用时区偏移量,根据你的设置,从 DB 中获取数据。

如果您确实需要存储时区,最简单的解决方案可能是将其存储为单独的字段:

import pytz


class test(models.Model):  
    TIMEZONE_CHOICES = tuple(zip(pytz.all_timezones, pytz.all_timezones))
    
    mobile_last_login = models.DateTimeField()
    timezone = models.CharField(max_length=32, choices=TIMEZONE_CHOICES, default=str(pytz.utc))