【问题标题】:Django Rest Framework how to post date fieldDjango Rest Framework如何发布日期字段
【发布时间】:2019-04-25 07:44:47
【问题描述】:

我想发布带有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')

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

【问题讨论】:

  • 你的模型是什么样子的?
  • 将模型定义添加到我的问题中。
  • 能否请您也发布您的序列化程序?
  • 通过datetime.datetime.now() 生成的日期是否有效?如果没有,请尝试使用DateTimeField 而不是DateField
  • 为问题添加了序列化程序。

标签: django django-rest-framework


【解决方案1】:

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

更多信息:

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 在 cmets 中提到的,日期输入格式也可以在设置中配置,以默认影响每个序列化程序。例如:

REST_FRAMEWORK = {
    'DATE_INPUT_FORMATS': ['iso-8601', '%Y-%m-%dT%H:%M:%S.%fZ'],
}

【讨论】:

  • 序列化器的代码是否正确?应该是date = DateField(input_formats=['%Y-%m-%dT%H:%M:%S.%fZ'])
  • 例如:datetime.strptime("2015-02-11T00:00:00.000Z", "%Y-%m-%dT%H:%M:%S.%fZ")。但请注意,Z 是硬编码的,请参阅我的最后一段。你需要解析任何可能的时区吗?
  • 在我的具体情况下,我可能不会解析任何可能的时区。但如果为所有时区制定通用解决方案很容易,我会知道的。
  • 另外,我已经修正了错字,你是对的:我错过了date =
  • 是的!有用!抱歉之前的虚假陈述,非常感谢!我已将以下字符串添加到配置中,以使我不必在每个序列化器中添加该字符串:REST_FRAMEWORK = { 'DATE_INPUT_FORMATS': ['iso-8601', '%Y-%m-%dT%H:%M:%S.%fZ'] }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2012-12-31
  • 2013-01-15
  • 2016-09-08
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多