Как сериализовать поле 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")