В сериализаторе моделей фреймворка отдыха 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)
Может ли кто-нибудь помочь мне с этим.
Спасибо за помощь!!!