【问题标题】:Django model DateTimeField set auto_now_add format or modify the serializerDjango 模型 DateTimeField 设置 auto_now_add 格式或修改序列化器
【发布时间】:2016-09-17 17:05:30
【问题描述】:

我的模型中有这个字段:

createdTime = models.DateTimeField(_('Creation date'), help_text=_('Date of the creation'),
                                   auto_now_add=True, blank=True)

并以这种格式保存:

2016-05-18T15:37:36.993048Z

所以我想把它转换成这种格式DATE_INPUT_FORMATS = ('%d-%m-%Y %H:%M:S') 但我不知道在哪里做。

我有一个简单的序列化程序类,我可以重写它来修改格式吗?或者创建一个 get_date() 模型方法?

class ObjectSerializer(serializers.ModelSerializer):
    """
    Serializer for object.
    """
    class Meta:
        model = Object

我的设置:

DATETIME_FORMAT = '%d-%m-%Y %H:%M:%S'

USE_I18N = True

USE_L10N = False

USE_TZ = False

【问题讨论】:

    标签: python django datetime serialization python-datetime


    【解决方案1】:

    在您的settings.py 中设置DATETIME_FORMAT 指定为here

    用于在 any 中显示日期时间字段的默认格式 系统的一部分。请注意,如果 USE_L10N 设置为 True,则 语言环境决定的格式具有更高的优先级,将被应用 而是

    settings.py 的日期部分随后应如下所示:

    DATETIME_FORMAT = '%d-%m-%Y %H:%M:%S' 
    USE_L10N = False
    USE_TZ = False # if you plan to disable timezone support
    

    或者,您可以在检索后手动更改格式:

    import datetime
    
    datetime_str = '2016-05-18T15:37:36.993048Z'
    old_format = '%Y-%m-%dT%H:%M:%S.%fZ'
    new_format = '%d-%m-%Y %H:%M:%S'
    
    new_datetime_str = datetime.datetime.strptime(datetime_str, old_format).strftime(new_format)
    print(new_datetime_str)
    #'18-05-2016 15:37:36'
    

    此转换可以作为您建议的get_date() 方法添加到您的序列化程序或模型中

    【讨论】:

    • 您好,感谢您的回答。我将这些设置添加到我的 settings.py DATETIME_FORMAT = '%d-%m-%Y %H:%M:S' 和 USE_L10N = True 但它仍然像这样保存日期:+------- ---------------------+ |创建时间 | +----------------------------+ | 2016-05-18 15:37:36.993048 | | 2016-05-23 08:25:41.536701 | | 2016-05-23 08:27:24.348154 | +----------------------------+ 我也有 USE_I18N = True
    • 您的格式缺少一个字符:%S 而不是S。然后USE_L10N = False.
    • 谢谢!咖啡还没有开始... 一个问题,我也有 USE_I18N = True(不同于 USE_L10N),该字段是否也需要设置为 False?
    • USE_I18N 只涉及 Django 翻译系统。我认为它的值不会影响您的 datetime 设置
    • mm 那很奇怪,我不知道为什么仍然无法正常工作,我用我在 Django 1.9 中使用的设置更新了我的问题
    【解决方案2】:

    您可以在模型的序列化程序中定义 DateTimeField 的格式 (在 django 3.1.5 上检查):

    class ObjectSerializer(serializers.ModelSerializer):
       createdTime = serializers.DateTimeField(format="%d-%m-%Y %H:%M:%S")
    
       class Meta:
          model = Object
          fields = '__all__'
    

    【讨论】:

    • 这对我来说效果很好。上面提到的settings.py配置对于最新的Django来说似乎已经过时了。
    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2018-01-30
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多