Drf unique_together предотвращает уничтожение в наборе - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть модель с ограничением unique_together

class ExampleModel(models.Model):
  id = models.AutoField(primary_key=True)
  cmp = models.ForeignKey('Titles',
       on_delete=models.PROTECT)
  env = models.CharField(max_length=32)

      class Meta:
        unique_together = (
            'cmp ',
            'env ',
        )

Сериализатор с полями, указанными выше:

class ExampleModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = ExampleModel
        fields = ('id', 'cmp ', 'env')

И во множествах просмотра следующий метод уничтожения:

 def destroy(self, request, pk):
     serializer = self.get_serializer(data=request.query_params)
     serializer.is_valid(raise_exception=True)

     instance = self.get_object()
     self.perform_destroy(instance)

В строке serializer.is_valid () обрывается со следующей ошибкой:

{"non_field_errors":["The fields cmp, envmust make a unique set."]}

Любые идеи, почему это происходит и как правильно его решить

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Действие уничтожения не требует никаких данных, поэтому вам не следует предоставлять или пытаться сериализовать тело запроса.Он просто получает идентификатор из URL, поскольку он является конечной точкой детализации, извлекает объект и удаляет его.Возможно, вы захотите взглянуть на оригинальную реализацию уничтожения, прежде чем переопределить ее

0 голосов
/ 04 февраля 2019

Правильный способ уничтожить что-либо с помощью стандартного DRF - предоставить уникальный идентификатор (часто pk) и уничтожить его.Вызывая сериализатор без экземпляра, вы действуете так, как будто хотите создать новый экземпляр.По этой причине DRF не позволит вам пройти этап проверки.

...