Правильный способ форматирования ввода и вывода TimeField в Django Rest Famework? - PullRequest
2 голосов
/ 27 мая 2019

models.py

class DemoA(models.Model):
    my_time = models.TimeField()

serializers.py

class DemoASerializer(serializer.ModelSerializer):
    class Meta:
        model = DemoA
        fields = ('my_time', )

По умолчанию для поля my_time это даетформат 10:30:00, (%H:%M:%S).Что нужно, так это сериализованный формат как 10:30, (%H:%M).

Есть ли способ по умолчанию для определения формата для таких случаев, например, указание extra_kwargs в сериализаторе Meta?

Ответы [ 2 ]

4 голосов
/ 27 мая 2019

Вы можете указать, как поле должно форматировать данные, указав TimeField [drf-doc] (это , а не TimeField [Django-doc] модели Django):

class DemoASerializer(serializers.ModelSerializer):

    <b>my_time = serializers.TimeField(format='%H:%M')</b>

    class Meta:
        model = DemoA
        fields = ('my_time', )

или с extra_kwargs [drf-doc] :

class DemoASerializer(serializers.ModelSerializer):

    class Meta:
        model = DemoA
        fields = ('my_time', )
        extra_kwargs = {<b>'my_time': {'format': '%H:%M'}</b>}
1 голос
/ 27 мая 2019

Настройка формата на сериализаторе работает, но он может быть антипаттерном по масштабу, так как вам нужно будет добавить его ко всем сериализаторам во всем приложении.DRF позволяет вам установить его в ваших настройках в качестве формата по умолчанию для вашего приложения.Вы показываете set it, и переопределяете формат на сериализаторе только при необходимости.

REST_FRAMEWORK = {
   ... # your other stuff
   'TIME_INPUT_FORMATS': ('%H:%M', )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...