В сериализаторе моделей фреймворка отдыха Django ошибка при обновлении модели через viewset для уникального столбца [duplicate]

Я работаю над созданием на основе Django rest framework viewsets.

Я пытаюсь обновить модель с именем machine с помощью стандартного метода update набора представлений. В моей модели есть уникальное поле с именем machine_number. Модель приведена ниже.

class Machine(models.Model):
    id = models.AutoField(primary_key=True)
    machine_number = models.IntegerField(unique=True)
    count = models.FloatField(default=None, null=True)
    variety = models.CharField(max_length=255, default=None, null=True)
    lycra_draft = models.CharField(max_length=255, default=None, null=True)
    feedback = models.CharField(max_length=10000, default=None, null=True)
    csp = models.FloatField(default=None, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

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

class MachineSerializer(serializers.ModelSerializer):

    class Meta:
        model = Machine
        fields = ('id', 'machine_number', 'count', 'variety', 'lycra_draft', 'feedback', 'csp')

Теперь, когда я обновляю модель с помощью этого сериализатора, он выдает следующую ошибку.

Machine with this machine number already exists.

Для устранения этой ошибки я переписал метод update сериализатора.

Я хочу избежать этого.

Мой набор видов:

class MachineViewSet(viewsets.ViewSet):
    serializer_class = MachineSerializer
    queryset = Machine.objects.all()

    def update(self, request, pk):
        try:
            machine = Machine.objects.get(pk=pk)
            request.data['machine_number'] = machine.machine_number
        except Machine.DoesNotExist:
            response = build_custom_response(False, 'Machine not found', '')
            return Response(response, status=status.HTTP_404_NOT_FOUND)

        serializer = self.serializer_class(data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            serialized_data = serializer.data
            success = True
            message = "Machine updated successfully"
            status_code = status.HTTP_200_OK
        else:
            success = False
            status_code = status.HTTP_400_BAD_REQUEST
            err_msg = '\n'
            error_list = [(serializer.errors[error][0]).capitalize() for error in serializer.errors]
            message = err_msg.join(error_list)

        data = serialized_data if 'serialized_data' in locals() else ''
        response = build_custom_response(success, message, data)
        return Response(response, status=status_code)

Может ли кто-нибудь помочь мне с этим.

Спасибо за помощь!!!

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