Django的嵌套对象序列化

时间:2020-04-10 14:31:11

标签: django django-serializer

我很难理解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,我做错了什么?

0 个答案:

没有答案