我很难理解django序列化程序的工作原理。我有一个api_view函数负责创建带有嵌套对象Laboratoire的BGES对象,例如:
@api_view(['POST'])
def add_bges(request):
laboratoire_data = request.data.pop('laboratoire')
laboratoire_serializer = LaboratoiresSerializer(data=laboratoire_data)
if laboratoire_serializer.is_valid():
laboratoire_serializer.save()
request.data["laboratoire"] = laboratoire_serializer.data["id"]
bges_serializer = BGESSerializer(data=request.data)
if bges_serializer.is_valid():
bges_serializer.save()
return Response(bges_serializer.data, status=status.HTTP_201_CREATED)
return Response(bges_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
return Response(laboratoire_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我的BGESSerializer看起来像这样
class BGESSerializer(serializers.ModelSerializer):
class Meta:
model = BGES
fields = '__all__'
这样,返回的对象不包含Laboratoire对象,因此我可以通过
进行更改class BGESSerializer(serializers.ModelSerializer):
laboratoire = LaboratoiresSerializer(read_only=True)
class Meta:
model = BGES
fields = '__all__'
但是这样,当我像这样在api_view中用id设置变量labouratoire
request.data["laboratoire"] = laboratoire_serializer.data["id"]
它不再起作用。我了解django现在期望添加一个对象:
laboratoire = Laboratoire.objects.get(pk=laboratoire_serializer.data["id"])
laboratoire_serializer2 = laboratoire_serializer(laboratoire)
request.data["laboratoire"] = laboratoire_serializer2.data
但仍然无法正常工作,最终答案中的labouratoire字段为None,我做错了什么?