我有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',])
答案 0 :(得分:1)
格式字符串可以是明确的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'
}