Формат даты и времени в Django отличается от формата даты и времени в DRF сериализаторе - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь понять, почему это происходит.У меня есть поле Django DateTime и сериализатор Django Rest Framework, который использует это поле.

Я пытаюсь сравнить даты для них обоих и получить следующие результаты из конечной точки JSON и результата модели:

DRF: 2018-12-21T19:17:59.353368Z
Model field: 2018-12-21T19:17:59.353368+00:00

Есть ли способ сделать их похожими?Так что, чтобы оба они были "Z" или "+00: 00".

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Помимо предыдущего ответа, вы также можете изменить формат DateTime в вашем сериализаторе.

from rest_framework import serializers

class YourSerializer(serializers.ModelSerializer):
    your_datetime_field = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S")

    class Meta:
        model = YourModel
        fields = '__all__'
0 голосов
/ 22 июня 2019

Я пришел сюда из Google в поисках быстрого решения, чтобы получить это (например, скопировать и вставить).Итак, заимствуя из ответа @ RezaTorkamanAhmadi, для любого, кто хочет получить сериализатор DRF DateTimeField в формате 2018-12-21T19:17:59.353368+00:00 (тот же формат, что и по умолчанию models.DateTimeField, чтобы ваши сериализованные значения соответствовали значениям вашей модели - вопрос ОП и мойтоже) вы ищете либо:

# settings.py

REST_FRAMEWORK = {
    ...
    'DATETIME_FORMAT': "%Y-%m-%d %H:%M:%S.%f%z", 
    ...
}

, либо если вы просто хотите это для определенного поля сериализатора DateTimeField, которое вы ищете

from rest_framework import serializers

class MySerializer(serializers.Serializer):

    some_date = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S.%f%z")

Источники:

  1. https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
  2. https://www.django -rest-framework.org / api-guide / fields / # datetimefield
  3. https://stackoverflow.com/a/53893377/10541855(Ответ Резы Торкамана Ахмади)
0 голосов
/ 22 декабря 2018

Это потому, что django rest framework использует свое собственное форматирование даты и времени.Чтобы изменить это, в вашем settings.py файле должна существовать переменная dict с именем REST_FRAMEWORK (если она не создана) и добавьте это:

REST_FRAMEWORK = {
    ...
    'DATETIME_FORMAT': "%Y-%m-%d - %H:%M:%S", 
    ...
}

Также проверьте USE_TZ состояние переменной тоже в вашемsettings.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...