python - 向 Django Rest 框架返回的 json 响应添加额外的属性

标签 python django django-rest-framework django-4.0

我正在使用 djangorestframework 运行 django 4.0.6。

这是我的serializers.py

from django.contrib.auth import get_user_model
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):  # new
    class Meta:
        model = get_user_model()
        fields = (
            "id",
            "username",
        )

这是我的views.py

from django.contrib.auth import get_user_model
from rest_framework import generics

from .serializers import UserSerializer


class UserList(generics.ListCreateAPIView):
    queryset = get_user_model().objects.all()
    serializer_class = UserSerializer

这是 API 的 json 响应;

{
    "count": 3,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 1,
            "username": "test"
        },
        {
            "id": 4,
            "username": "test1"
        },
        {
            "id": 8,
            "username": "test3"
        }
    ]
}

我想向 Django Rest 框架返回的 json 响应添加一个额外的属性,使其看起来像这样;

{
    "count": 3,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 1,
            "username": "test"
            "combine" : "test 1"
        },
        {
            "id": 4,
            "username": "test1"
            "combine" : "test1 4"
        },
        {
            "id": 8,
            "username": "test3"
            "combine" : "test3 8"
        }
    ]
}

额外属性combine是通过连接idusername创建的。

最佳答案

您可以使用 SerializerMethodField :

class UserSerializer(serializers.ModelSerializer):
    combine = serializers.SerializerMethodField()

    class Meta:
        model = get_user_model()
        fields = (
            "id",
            "username",
            "combine",
        )

    def get_combine(self, obj):
        return f"{obj.username} {obj.id}"

关于python - 向 Django Rest 框架返回的 json 响应添加额外的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73612304/

相关文章:

python - PyInstaller .exe 文件什么都不做

python - Django ListView,通过修改 "current_category"变量将列表拆分为模板中的类别

django - 获取与内联表单相关的外键字段名称

django - 我正在尝试使用 DRF APITestcase 测试基于 DRF 的 API,并面临此错误 {"detail":"User not found","code":"user_not_found"}'

django - 从 Django REST Framework 获取未分页的结果

python - Django Rest - "<ClientProfile: mike@tyson.com>"需要有字段 "clientprofile"的值,然后才能使用此多对多关系

python - DRF 在序列化器 update() 调用中更新 ManyToMany

python - 是否可以只修改 ndb 数据存储实体的一个属性?

html - 链接到 Django HTML 模板中的 CSS 文件

java - 如何在禁用 IMAP/POP3 访问的情况下从 Gmail 获取电子邮件