Зафиксировать уникальное ограничение на POST в DRF

У меня есть модель с уникальным полем следующим образом:

models.py

class MyModel(...):
    name = models.CharField(max_length=32, ...)
    key = models.CharField(max_length=32, ...)

    class Meta:
        constraints = [
            UniqueConstraint(
                fields = ['name', 'key'],
                ...
            ),
        ]

Если я отправляю POST запрос, в котором name больше 32 символов, я получаю правильный ответ об ошибке:

{"name": ["Ensure this field has no more than 32 characters."]}

Однако, если я отправляю POST-запрос, в котором комбинация name и key не является уникальной, возникает исключение, и сообщение клиенту не отправляется. Как я могу определить, когда нарушается ограничение уникальности, и отправить сообщение клиенту?

Нашел решение, DRF предоставляет UniqueValidators ссылку:

from rest_framework.validators import UniqueTogetherValidator

class ExampleSerializer(serializers.Serializer):
    # ...
    class Meta:
        # ToDo items belong to a parent list, and have an ordering defined
        # by the 'position' field. No two items in a given list may share
        # the same position.
        validators = [
            UniqueTogetherValidator(
                queryset=ToDoItem.objects.all(),
                fields=['list', 'position']
            )
        ]
Вернуться на верх