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:)