nit*_*ter 8 django django-rest-framework
我想发布带有字段的 JSON 请求date:
{
"date":"2015-02-11T00:00:00.000Z"
}
Run Code Online (Sandbox Code Playgroud)
它的字符串是从Date对象自动转换的,我不想T00:00:00.000Z在前端手动裁剪该部分。
但是如果我发布这样的请求,DateField 的 Django Rest Framework 验证器会告诉我,该日期格式无效。
我的型号:
class Event(models.Model):
name = models.CharField('Name', max_length=40, blank=True, null=True)
date = models.DateField('Date', blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
我的序列化器:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('id', 'name', 'date')
Run Code Online (Sandbox Code Playgroud)
解决这个问题的正确方法是什么?
Jos*_*ilo 11
您可以使用不同的格式(与您隐式使用的默认格式不同)修改序列化程序中的日期字段。
更多信息:
https://www.django-rest-framework.org/api-guide/fields/#datefield
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
from rest_framework import serializers, fields
class EventSerializer(serializers.ModelSerializer):
date = fields.DateField(input_formats=['%Y-%m-%dT%H:%M:%S.%fZ'])
class Meta:
model = Event
fields = ('id', 'name', 'date')
Run Code Online (Sandbox Code Playgroud)
请注意,如果您需要解析 UTC 以外的时间戳(时间戳末尾的 Z),则需要进行DateField更多自定义。
正如@nitrovatter 在评论中提到的,日期输入格式也可以在设置中配置以默认影响每个序列化程序。例如:
REST_FRAMEWORK = {
'DATE_INPUT_FORMATS': ['iso-8601', '%Y-%m-%dT%H:%M:%S.%fZ'],
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10913 次 |
| 最近记录: |