【问题标题】:Django: default user model RunTimeWarning about naïve DateTimeFieldDjango:关于天真的 DateTimeField 的默认用户模型 RunTimeWarning
【发布时间】:2019-01-10 11:41:39
【问题描述】:

我的所有模型除了我的用户模型都继承自这个模型:

class BaseModel(models.Model):
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

每当用户注册时,我都会收到以下警告:

RuntimeWarning:当时区支持处于活动状态时,DateTimeField User.date_joined 收到了一个简单的日期时间 (2018-07-04 06:38:11.288567)。

由于我不控制用户创建过程(我使用的是 Django 提供的默认用户模型),我不知道如何解决这个问题。

【问题讨论】:

  • 看来你改变了默认用户注册的行为。如果从抽象用户类扩展,你能显示注册代码和用户模型吗?
  • @JerinPeterGeorge 我没有。我的代码中没有注册代码或用户模型,因为它们都与一个名为 django-registartion 的库一起使用,该库仅包含模板。

标签: python django


【解决方案1】:

使用 django utils 的timezone

from django.utils import timezone

class BaseModel(models.Model):
    created_date = models.DateTimeField(default=timezone.now)
    modified_date = models.DateTimeField()

    # override default save funtion 
    def save(self, *args, **kwargs):
        self.modified_date = timezone.now()
        return super(BaseModel, self).save(*args, **kwargs)

【讨论】:

  • 谢谢,但我的用户模型没有从 BaseModel 继承,所以这不适用。我无权访问该课程,因此提出了问题。
  • 我明白了。有什么特殊原因导致您无法访问该课程吗?如果您指的是默认用户类,您可以尝试创建自定义用户类来操作默认行为。
  • 是的,但这似乎有点矫枉过正。我的意思是,特别是如果 Django 抱怨两个原生特性(一个是时区,另一个是默认用户类)
  • 是的,我最近接触了 django,所以我不知道如何处理它。 timezone.now() 解决了我面临的问题。如果您在settings.py 中更改了默认时区,也许将其更改回默认值会有所帮助。
  • 我愿意,但我更改了时区以便能够使用它;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 2014-05-15
  • 1970-01-01
  • 2014-03-28
  • 2019-08-06
相关资源
最近更新 更多