Django Rest Framework 如何发布日期字段

标签 django django-rest-framework

我想发布带有字段 date 的 JSON 请求:

{
    "date":"2015-02-11T00:00:00.000Z"
}

它的字符串是从 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)

我的序列化器:
class EventSerializer(serializers.ModelSerializer):
    class Meta:
        model = Event
        fields = ('id', 'name', 'date')

解决这个问题的正确方法是什么?

最佳答案

您可以使用不同的格式(与您隐式使用的默认格式不同)修改序列化程序中的日期字段。

更多信息:

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')

请注意,如果您需要解析 UTC 以外的时间戳(时间戳末尾的 Z),则需要自定义 DateField多一点。

正如@nitrovatter 在评论中提到的,日期输入格式也可以在设置中配置以默认影响每个序列化程序。例如:
REST_FRAMEWORK = {
    'DATE_INPUT_FORMATS': ['iso-8601', '%Y-%m-%dT%H:%M:%S.%fZ'],
}

关于Django Rest Framework 如何发布日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434094/

相关文章:

many-to-many - django-filters BaseInFilter 和 CharFilter 在 django-rest-framework 为空时不返回任何结果

python - 如何获取某些国家的城市列表?

python - 为什么 Django 的登录表单显示错误?

python - 奇怪的 django 导入错误

python - 如何使用 Django 和 jQuery 设置文件下载对话框?

python - 有没有一种方法可以在没有 UI 的情况下在浏览器中登录 django Rest api?

python - 命令错误 : You appear not to have the 'sqlite3' program installed or on your path

python - 在Django Rest框架中传递几个参数

python - Django REST框架: apply filter to list view but not detail view

python - Django 休息框架 : Get detail view using a field other than primary key integer id