Django PUT представления Rest Framework о том, что validated_data не заполнено - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь использовать Django Rest Framework для обновления моей базы данных с использованием HTTP PUT, но когда на моем клиенте я получаю ошибку Exception Value: update() missing 1 required positional argument: 'validated_data', а в коде python я получаю сообщение об ошибке Validated_data unfilled.

Вот мой код модели:

    nombre = models.CharField(max_length=200)
    calle_numero = models.CharField(max_length=200)
    zona_residencial = models.ForeignKey(Zona, on_delete=models.CASCADE)
    telefono = models.CharField(max_length=20)
    numero_habitantes = models.IntegerField()
    tipo_residente = models.CharField(max_length=100,
                               choices=[(tag.value, tag.value) for tag in TipoHabitanteEnum])
    codigo_acceso = models.CharField(max_length=6, default="000000")
    status_activacion = models.BooleanField(default=False)

    class Meta:
        verbose_name = 'Residente'
        verbose_name_plural = 'Residentes'

    def __str__(self):
        return self.nombre

вот мой код сериализатора:

    class Meta:
        model = Residente
        fields = '__all__'

И мой взгляд (метод PUT, где ошибка) код :

        """
        Modifica un residente
        """
        try:
            id_residente = self.queryset.get(pk=kwargs["pk"])
            serializer = ResidenteSerializer
            update_residente = serializer.update(id_residente, request.data)
            return Response(ResidenteSerializer(update_residente).data)
        except Residente.DoesNotExist:
            return Response(
                data={
                    "message": "El residente con id {} no existe".format(kwargs["pk"])
                },
                status=status.HTTP_404_NOT_FOUND
            )

в update_residente = serializer.update(id_residente, request.data) - это ошибка validated_data, и именно поэтому я не могу обновить свою базу данных, но я не знаю, как ее исправить.

Надеюсь, вы сможете помоги мне.

1 Ответ

0 голосов
/ 30 января 2020

Вы не создаете объект сериализатора.

измените код на этот:

"""
Modifica un residente
"""
try:
    id_residente = self.queryset.get(pk=kwargs["pk"])
    serializer = ResidenteSerializer(id_residente, data=request.data)
    if serializer.is_valid(raise_exception=False):
        update_residente = serializer.save()
        return Response(ResidenteSerializer(update_residente).data)
    return Response(serializer.errors, status=400)
except Residente.DoesNotExist:
    return Response(
            data={
               "message": "El residente con id {} no existe".format(kwargs["pk"])
                },
                status=status.HTTP_404_NOT_FOUND
            )

Предложение для более простого кода:

id_residente = get_object_or_404(self.queryset, pk=kwargs["pk"])
serializer = ResidenteSerializer(id_residente, data=request.data)
if serializer.is_valid():
    serializer.save()
return Response(serializer.data)

Этот код такой же как указано выше, но проще.

используйте from rest_framework.generics import get_object_or_404 для импорта функции.

...