Django Rest Framework как разместить поле даты - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу опубликовать JSON-запрос с полем date:

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

Эта строка автоматически преобразуется из объекта Date, и я не хочу обрезать деталь T00:00:00.000Z вручную вfrontend.

Но если я отправлю такой запрос, Django Rest Framework DateField скажет мне, что дата имеет недопустимый формат.

Моя модель:

class Event(models.Model):
    name = models.CharField('Name', max_length=40, blank=True, null=True)
    date = models.DateField('Date', blank=True, null=True)

MyСериализатор:

class EventSerializer(serializers.ModelSerializer):
    class Meta:
        model = Event
        fields = ('id', 'name', 'date')

Как правильно решить эту проблему?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете изменить поле даты в сериализаторе в другом формате (отличном от стандартного, который вы неявно используете).

Дополнительная информация:

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'],
}
...