Django Rest framework, нарушено ограничение not-null DETAIL

У меня вопрос по поводу моих сериализаторов. У меня следующая структура, обобщающая. Состоит из 3 моделей и представления CreateAPIView B содержит OneToOneField = A C содержит ForeingKey = B (many = True) [{List Image}]. Я не очень понимаю, как выполнить метод create во вложенном сериализаторе.

class A (serializer.ModelSerializer):
       class Meta:
                 model = A

class B (serializer.ModelSerializer):
       A = CreateASerializer () # OneToOneField to A
       C = CreateBSerializer (many = True) # ForeingKey to B List [{}]
       class Meta:
                 model = B
              
class C (serializer.ModelSerializer):
       class Meta:
                 model = C

#Can I separately create the Create method for each serializer?
#   For instance:

class A (serializer.ModelSerializer):
       class Meta:
                 model = A
        def create (self, validated_data):
               return models.A.create (** validated_data)

class B (serializer.ModelSerializer):
       A = CreateASerializer () # OneToOneField
       C = CreateBSerializer (many = True) # ForeingKey List [{image}]
       class Meta:
                 model = B
                 fields = ('A', 'detail', 'C')
    def create (self, validated_data):
        A_data = validated_data.pop ('A')
        C_data = validated_data.pop ('C')

        date1 = models.B.objects.create (**validated_data)
        date2 = models.C.objects.create (**validated_data)

        for f in A_data:
            models.A.objects.create (date1=date1, **f)

        for nu in C_data:
            models.C.objects.create (date2=date2, **nu)

        return ?

class C (serializer.ModelSerializer):
       class Meta:
                 model = C

    def create (self, validated_data):
        C_data = validated_data.pop (**validated_data)

        B = models.C.objects.create (**validated_data)

        for dat in C_data:
            models.C.objects.create (B=B, **dat)

        return B

Я читал 'https://www.django-rest-framework.org/api-guide/relations/', Но я делаю что-то не так.

class EDFSerializer(serializers.ModelSerializer):
    
    evento = CrearEventoSerializer()
    fotodanodetail = FotoDanoFiltroSerializer(many=True) # related_name='fotodanodetail'
    class Meta:
        model = models.Dano
        fields = ('evento','observacion','fotodanodetail')
    def create(self, validated_data):
        evento_data = validated_data.pop('evento')
        foto_data = validated_data.pop('fotodanodetail')
        evento = models.Dano.objects.create(**validated_data)
        dano = models.FotoDano.objects.create(**validated_data)
        for da in evento_data:
            models.Evento.objects.create(evento=evento, **da)
            print(evento_data)
        for fo in foto_data:
            models.FotoDano.objects.create(dano=dano, **fo)
            #return dano
        return evento
# Views
class CrearEDFdeListApiView(generics.CreateAPIView):
    serializer_class = EDFSerializer
    queryset = models.Dano.objects.all()

    # def post(self, request):
    #     serializer = self.serializer_class(data = request.data)
    #     if serializer.is_valid():
    #         serializer.save()
    #         print(request.data)
    #         return Response({'message': 'Perfect..!'}, status= status.status.HTTP_201_CREATED)
    #     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
## Error.
null value in column "evento_id" violates not-null constraint DETAIL:  Failing row contains (null, Hello this is a test ..Thanks).
Вернуться на верх