Как сериализовать поле DateTimeField в Django

Как я могу сериализовать поле dob, чтобы добиться того, чтобы dob было в формате;

03/Jan/2020 или 05-Feb-2021

class PersonSerializer():
    ....
    ........
    dob = serializers.DateTimeField(format="%d/%m/%Y")

    class Meta:
        model = Person
        fields = "__all__"

Из документации DRF;

Строки формата поля даты и времени. Строки формата могут быть либо форматами Python strftime, которые явно указывают формат, либо специальная строка 'iso-8601', которая указывает, что следует использовать формат даты в стиле ISO 8601. должны быть использованы. (eg '2013-01-29T12:34:56.000000Z')

Поэтому вы можете отформатировать его как datetime.datetime объект. Например

class PersonSerializer():
    ....
    ........
    dob = serializers.DateTimeField(format="%d/%b/%Y")

    class Meta:
        model = Person
        fields = "__all__"

Также следует отметить, что установка на строку формата означает, что возвращаемые значения to_representation должны быть принудительно выведены в строку.

Если вы хотите глобально выводить даты в определенном формате, то задайте его в settings.py file.

settings.py

REST_FRAMEWORK = {
    'DATE_FORMAT': "%d/%m/%Y",
    #-- other settings-----#

}

Однако если вы хотите выводить данные только для определенного поля модели, вы можете сделать это.

class PersonSerializer(serializers.ModelSerializer):
    # ....
    # ........
    custom_dob = serializers.ReadOnlyField()

    class Meta:
        model = Person
        fields = "__all__"

Вы можете создать свойство в Person модели

class Person(models.Model):
    dob = models.DateField()

    @property
    def custom_dob(self):
        return self.dob.strftime("%d/%m/%Y")
Вернуться на верх