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

标签 django serialization django-rest-framework

我有一个名为 Task with field delay 的模型,它是一个持续时间字段。

class Task:
    delay = models.DurationField(timedelta(seconds=0))

和如下序列化器。
class TaskSerializer(serializers.ModelSerializer):

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

在使用序列化程序创建实例时,我传递了诸如 {delay: 30} 之类的数据。期待秒过去。

实例已按预期创建。但是在检索时,我得到以下结果。
[
    {
        "delay": "00:00:00.000060",
    },
    {
        "delay": "00:00:00.000050",
    },
    {
        "delay": "00:00:00.000060",
    }
]

我试图仅以整数格式在序列化程序中获取延迟值。例如:
[
    {
        "delay": 60,
    },
    {
        "delay": 50,
    },
    {
        "delay": 60
    }
]

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

最佳答案

我通过使用 serializer method 解决了它自定义持续时间字段序列化,因此它可以在几秒钟内返回所需的值。

您的代码应如下所示:

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

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

    def get_delay(self, obj):
        return obj.delay.total_seconds()

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

希望这可以帮助

关于django - 如何更改序列化程序中持续时间字段值的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46428769/

相关文章:

c# - 无法使用 JSON.NET 正确序列化 JSON

c++ - Boost C++ 序列化一个 char *

python - Django Rest Framework,更新嵌套的序列化数据

python - 如何使用 Django REST 序列化程序对保留键进行验证?

python - 通过遍历多个关系(外键到外键?)来过滤 Django 表单字段

如果未找到行,Django Coalesce 将返回 null

django - 如何保持Celery在Django(drf)+ Redis + WSGI(EC2)中运行

python - Django:获取模板中管理页面的链接

java - 用 Java 编写简单的 JSON 响应

Django Rest 框架分页设置 - 内容范围