Python 在Django Rest框架中,如何用对象的id替换对象?

Python 在Django Rest框架中,如何用对象的id替换对象?,python,django,rest,django-rest-framework,serialization,Python,Django,Rest,Django Rest Framework,Serialization,我有以下序列化程序: class ASerializer(serializers.ModelSerializer): name = serializers.CharField() class Meta: model = AModel fields = ('id','name') class BSerializer(serializers.HyperlinkedModelSerializer): a = ASerializer(part

我有以下序列化程序:

class ASerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = AModel
        fields = ('id','name')


class BSerializer(serializers.HyperlinkedModelSerializer):
    a = ASerializer(partial=True)
    name = serializers.CharField()

    class Meta:
        model = ‌‌BModel
        fields = ('id','name', 'a')


class CSerializer(serializers.HyperlinkedModelSerializer):
    b = BSerializer(partial=True)
    created_by = UserSerializer(required=False) 
    message = serializers.CharField()

    class Meta:
        model = CModel
        fields = ('id','b', 'created_by', 'message')
以下是我发送给服务部门的数据:

data_json = {
    "id": '1',
    "b": '2',
    "created_by":'3',
    "message": 'Hello world'
}
我希望响应数据包含所有嵌套的完美对象,而不仅仅是嵌套对象id


如何用id替换
B
对象或
对象创建的
对象,以便创建
C
对象?

尝试此示例,序列化器定义为:

class ASerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = A
        fields = ('id', 'name')


class BSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    a = ASerializer(partial=True, many=True)

    class Meta:
        model = B
        fields = ('id', 'name', 'a')


class CSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    b = BSerializer(partial=True, many=True)

    class Meta:
        model = C
        fields = ('id', 'name', 'b')
class CViewSet(viewsets.ModelViewSet):
    queryset = C.objects.all()
    serializer_class = CSerializer
和视图集定义为:

class ASerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = A
        fields = ('id', 'name')


class BSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    a = ASerializer(partial=True, many=True)

    class Meta:
        model = B
        fields = ('id', 'name', 'a')


class CSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    b = BSerializer(partial=True, many=True)

    class Meta:
        model = C
        fields = ('id', 'name', 'b')
class CViewSet(viewsets.ModelViewSet):
    queryset = C.objects.all()
    serializer_class = CSerializer
这是上述视图集返回的json示例:

{
    "id": 2,
    "name": "c2",
    "b": [
        {
            "id": 2,
            "name": "b2",
            "a": [
                {
                    "id": 2,
                    "name": "a2"
                },
                {
                    "id": 3,
                    "name": "a3"
                }
            ]
        },
        {
            "id": 3,
            "name": "b3",
            "a": [
                {
                    "id": 3,
                    "name": "a3"
                }
            ]
        }
    ]
},

请尝试此示例,将序列化程序定义为:

class ASerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = A
        fields = ('id', 'name')


class BSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    a = ASerializer(partial=True, many=True)

    class Meta:
        model = B
        fields = ('id', 'name', 'a')


class CSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    b = BSerializer(partial=True, many=True)

    class Meta:
        model = C
        fields = ('id', 'name', 'b')
class CViewSet(viewsets.ModelViewSet):
    queryset = C.objects.all()
    serializer_class = CSerializer
和视图集定义为:

class ASerializer(serializers.ModelSerializer):
    name = serializers.CharField()

    class Meta:
        model = A
        fields = ('id', 'name')


class BSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    a = ASerializer(partial=True, many=True)

    class Meta:
        model = B
        fields = ('id', 'name', 'a')


class CSerializer(serializers.HyperlinkedModelSerializer):
    name = serializers.CharField()
    b = BSerializer(partial=True, many=True)

    class Meta:
        model = C
        fields = ('id', 'name', 'b')
class CViewSet(viewsets.ModelViewSet):
    queryset = C.objects.all()
    serializer_class = CSerializer
这是上述视图集返回的json示例:

{
    "id": 2,
    "name": "c2",
    "b": [
        {
            "id": 2,
            "name": "b2",
            "a": [
                {
                    "id": 2,
                    "name": "a2"
                },
                {
                    "id": 3,
                    "name": "a3"
                }
            ]
        },
        {
            "id": 3,
            "name": "b3",
            "a": [
                {
                    "id": 3,
                    "name": "a3"
                }
            ]
        }
    ]
},

尝试将字段更改为
(“id”、“b_uuid”、“created_uby_uid”、“message”)
,并且您可以使用完整的对象json获取id,如
b['id']
created_uby['id']
创建C对象时,请尝试更好地解释您想要做什么。您想要获取的数据应该是什么样子的?我想要获取所有嵌套对象中包含的数据,而不仅仅是嵌套对象id。@Ozren1983问题已经更新,将字段更改为
(“id”、“b_uid”、“created by_uid”、“message”)
,您还可以使用完整的对象json获取id,比如
b['id']
created\u by['id']
创建C对象时,请尝试更好地解释您想要做什么。你想得到的数据应该是什么样子的?我想得到所有嵌套对象中都包含的数据,而不仅仅是嵌套对象id。@Ozren1983问题已经更新了没有dude,不适用于带有
b
对象IDB的POST请求。顺便说一句,
b
不是对象列表
b
是一个单独的对象,我需要用id替换它:)不,不,用
b
对象的IDB来处理POST请求,顺便说一下,
b
不是一个对象列表
b
是一个单独的对象,我需要将其替换为id:)