如何更改序列化程序中持续时间字段值的格式?

4 django serialization django-rest-framework

我有一个名为“任务”的模型,带有字段延迟,它是一个持续时间字段。

class Task:
    delay = models.DurationField(timedelta(seconds=0))
Run Code Online (Sandbox Code Playgroud)

和一个序列化器如下。

class TaskSerializer(serializers.ModelSerializer):

    class Meta:
        model = Task
        fields = ('id', 'delay')
Run Code Online (Sandbox Code Playgroud)

在使用序列化器创建实例时,我传递数据,例如{delay: 30}期望传递秒数。

实例已按预期创建。但是在检索时,我得到以下结果。

[
    {
        "delay": "00:00:00.000060",
    },
    {
        "delay": "00:00:00.000050",
    },
    {
        "delay": "00:00:00.000060",
    }
]
Run Code Online (Sandbox Code Playgroud)

我试图仅以整数格式获取序列化器中的延迟值。例如:

[
    {
        "delay": 60,
    },
    {
        "delay": 50,
    },
    {
        "delay": 60
    }
]
Run Code Online (Sandbox Code Playgroud)

我不愿意在写入或读取序列化器中更改字段名称“延迟”。我怎样才能达到要求?

jul*_*sar 5

我通过使用序列化器方法来自定义持续时间字段序列化来解决这个问题,因此它可以在几秒钟内返回所需的值。

您的代码应如下所示:

class TaskSerializer(serializers.ModelSerializer):
    delay = serializers.SerializerMethodField()

    class Meta:
        model = Task
        fields = ('id', 'delay')

    def get_delay(self, obj):
        return obj.delay.total_seconds()
Run Code Online (Sandbox Code Playgroud)

注意:也许您需要创建不同的序列化器类来创建检索对象,因为序列化器方法仅适用于只读字段

希望这可以帮助