Добавьте дополнительное свойство к этому json-ответу, возвращаемому фреймворком Django rest

Я использую django 4.0.6 с djangorestframework.

Это моя 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

Вот json-ответ API;

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

Я хотел бы добавить дополнительное свойство к этому json-ответу, возвращаемому Django rest framework, чтобы он выглядел следующим образом;

{
    "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 создается путем конкатенации id и username.

Вы можете использовать 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}"
Вернуться на верх