Мне очень трудно понять, как работает django сериализатор. У меня есть функция api_view, отвечающая за создание объекта BGES с вложенным объектом Laboratoire, так что:
@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__'
Но так, когда я устанавливаю переменную laboratoire с идентификатором в api_view, как это
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
Но все еще не работает, поле laboratoire в окончательном ответе - None, что я делаю не так?