如何在Model Serializer中传递额外的参数

时间:2016-01-28 08:52:29

标签: python django django-rest-framework

我有一个模型序列化器类,其中有一个额外的字段,我想序列化它。下面是我的serilizer ..

from rest_framework import serializers
from .models import WUser


class UserTypeSerializer(serializers.Serializer):
    user_type = serializers.IntegerField(min_value=0, max_value=8, default=0)


class BaseUserSerializer(serializers.ModelSerializer):
    user_type = UserTypeSerializer()

    class Meta:
        model = WUser
        fields = ('user_type', 'username', 'email', 'first_name', 'last_name', 'password', 'mobile_no')

我用下面的方法称这种选择器。

serialized_data = BaseUserSerializer(user, data={"user_type": 0, "password": password})

但这不起作用..

我想要嵌套JSON格式的序列化输出,这是我创建另一个序列化器的原因。

必需的输出

        "user_type": 0,
        "user": {
            "username": "ABCED",
            "first_name": "Deendayal",
            "last_name": "Garg",
            "email": "deen@abc.com",
            "mobile_no": "9833213601",
            "password": "hard"
        }

1 个答案:

答案 0 :(得分:0)

你做了一个不必要的(和错误的)间接,并向后嵌套你的seializers。试试这个:

from rest_framework import serializers
from .models import WUser

class BaseUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = WUser
        fields = ('user_type', 'username', 'email', 'first_name', 'last_name', 'password', 'mobile_no')

class UserTypeSerializer(serializers.Serializer):
    user_type = serializers.IntegerField(min_value=0, max_value=8, default=0)
    user = BaseUserSerializer()

并创建UserTypeSerializer作为“根”(在视图中)。