我无法更改django drf中的日期格式

时间:2018-06-02 19:46:51

标签: django django-rest-framework

我有drf模型,它包含DateField。该字段默认格式为" YYYY-MM-DD"只是我想转换" DD-MM-YYYY"怎么可能。

from rest_framework import serializers
from.models import SpaUser
from djoser.serializers import UserCreateSerializer as BaseUserRegistrationSerializer
import datetime
from rest_framework.settings import api_settings



class SpaUserSerializer(serializers.ModelSerializer):

    date_joined = serializers.ReadOnlyField()
    birthdate = serializers.DateField(format="%d-%m-%Y", input_formats=['%d-%m-%Y',])

6 个答案:

答案 0 :(得分:1)

关于DateField

的DRF文档
  

格式字符串可以是明确的Python strftime格式   指定格式,或指定的特殊字符串'iso-8601'   应使用ISO 8601样式日期。 (例如'2013-01-29')

所以在你的情况下格式应该是

format="%d-%m-%Y"

答案 1 :(得分:1)

尽管此线程很旧,但我在尝试解决类似问题时发现了它。尽管回答并不能给我完整的答案,但确实促使我阅读了有关该主题的DRF很有帮助的文档:

https://www.django-rest-framework.org/api-guide/settings/#date-and-time-formatting

就我而言,我正在使用Vuetify的v-calendar,Vue JS和DRF构建事件日历。 v日历要求格式为YYYY-MM-DD HH:MM,并且首选字符串。我可以将字符串简单地存储在数据库中,但是我更喜欢将datetime字段以本机Python格式存储,以便在需要时进行服务器端处理。因此,在我的settings.py文件中,我将以下内容添加到了REST_FRAMEWORK设置中:

'DATETIME_INPUT_FORMATS': ['%Y-%m-%d %H:%M',],
'DATETIME_FORMAT': '%Y-%m-%d %H:%M',

第一个带有一个列表(因此带有括号和逗号),第二个带有一个字符串。然后,在我的序列化程序中,我使用:

start = serializers.DateTimeField()

在前端,我将日期作为字符串对象,并将它们传递到日历进行显示,然后它可以工作。在发布数据时,我只是将它们以相同的字符串格式传递回去,然后DRF序列化器将它们编码为本地Python进行存储。

答案 2 :(得分:0)

要使其正常工作,input_formats是您需要分配所需格式的参数,format是输出格式

birthdate = serializers.DateField(input_formats=['%d-%m-%Y',])

或者您可以在设置中设置默认输入格式

DATE_INPUT_FORMATS = [
    ("%d-%m-%Y"),
]

答案 3 :(得分:0)

如果是通用的,请在您的设置文件中将"DATE_INPUT_FORMATS"添加到REST_FRAMEWORK设置,例如:

REST_FRAMEWORK = {
    "DATE_INPUT_FORMATS": ["%d-%m-%Y"],
    ...
}

有关详情,请查看http://www.django-rest-framework.org/api-guide/settings/#date-and-time-formatting

答案 4 :(得分:0)

通过结合所有解决方案,它可以正常工作

REST_FRAMEWORK = {
    # "DATE_INPUT_FORMATS": "%d-%m-%Y", doesn't works
    'DATE_INPUT_FORMATS': [("%d-%m-%Y"),],it works
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

答案 5 :(得分:0)

在 settings.py 中包括:

REST_FRAMEWORK = {  
    'DATE_FORMAT': '%d-%m-%Y'
}