如何在 Django 中序列化 DateTimeField

How to serialize DateTimeField in Django

如何序列化 dob 字段以实现 dob 的具体格式,例如 ==> 03/Jan/2020 或 05-Feb-2021

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


    class Meta:
        model = Person
        fields = "__all__"

到目前为止,我的格式是 20/12/2020

来自 DRF 文档;

DateTimeField format strings. Format strings may either be Python strftime formats which explicitly specify the format, or the special string 'iso-8601', which indicates that ISO 8601 style datetimes should be used. (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 return 值应强制为字符串输出。

如果你想在全球范围内以某种格式输出日期,那么你可以在 settings.py 文件中设置它。

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")