Зафиксировать уникальное ограничение на 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']
)
]