Django rest framework, ¿Каким образом лучше всего устранить ошибку, "ошибка создания списка индексов должна быть целочисленной или чанкированной, а не строковой"?

Есть ли возможность решить мою проблему, пожалуйста.

У меня есть 3 формы, из которых 2 связаны. Я использую create на ModelViewSet, который отправил данные, но получаю следующую ошибку. (индексы списка должны быть целочисленными или chunked, а не str). Конечно, я пытаюсь создать список объектов, но... ¿Как бы вы разработали синтаксис? С использованием For?

ModelViewSet



class CreateApiModelViewSet(viewsets.ModelViewSet):

    serializer_class = EDFSerializer

    def get_queryset(self):
        
        dano = models.Dano.objects.all()
        return dano

    def create(self, request, *args, **kwargs):
        data = request.data

       
        new_evento = models.Evento.objects.create(
            tabla=data["evento"]["tabla"],
            usuario=models.Usuario.objects.filter(user_id=data["evento"]["usuario"]).first(),
            patio=models.Patio.objects.filter(id=data["evento"]["patio"]).first()
            
            )
        
        new_evento.save()

        # New Dano

        new_dano = models.Dano.objects.create(
            evento=new_evento, 
            observacion=data["observacion"])
        new_dano.save()

        # Model FotoDano With Error.. :(

        foto = []

        for fotos in foto:
            for f in data["fotodanodetail"]["foto"][0]:

            foto_obj = models.FotoDano.objects.get(
                foto=data["fotodanodetail"]["foto"],
                dano=new_dano)
            new_foto_dano.foto.add(foto_obj)

          # Comment
        # new_foto_dano = models.FotoDano.objects.create(
        #     #id=data["fotodanodetail"]["id"],
        #     #foto=data["fotodanodetail"]["foto"], 
        #     dano=new_dano)
        # new_foto_dano.save()


        serializer = EDFSerializer(new_evento)

        return Response(serializer.data)

Serializer

# Import Base64
from drf_extra_fields.fields import Base64ImageField

class EDFSerializer(serializers.ModelSerializer):

    fotodanodetail = Base64ImageField(required=False)
    
    evento = CrearEventoSerializer()
    fotodanodetail = FotoDanoFiltroSerializer(many=True)

    class Meta:
        model = models.Dano
        fields = ('evento','observacion','fotodanodetail')

Почтальон

enter image description here

На основе DRF, когда у вас есть записываемый вложенный сериализатор, лучший способ - переопределить .create метод вашего сериализатора, а не viewset

для получения дополнительной информации ознакомьтесь с документацией по drf здесь

Все данные в request.data имеют тип str, который необходимо привести как int(data["evento"]["usuario"])

Вернуться на верх