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')
Почтальон
На основе DRF, когда у вас есть записываемый вложенный сериализатор, лучший способ - переопределить .create
метод вашего сериализатора, а не viewset
для получения дополнительной информации ознакомьтесь с документацией по drf здесь
Все данные в request.data
имеют тип str, который необходимо привести как int(data["evento"]["usuario"])