Как вы решаете проблему столкновения уникальных полей в django?

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

class Foo(models.Model):
    unique_field = models.URLField(unique=True)
    another_field = models.TextField()
    # etc...

и соответствующий ему ViewSet выглядит следующим образом (привязан к /foo/):

class FooViewSet(
    viewsets.GenericViewSet,
    mixins.ListModelMixin,
    mixins.CreateModelMixin,
    mixins.DestroyModelMixin,
):
    queryset = Foo.objects.all()
    serializer_class = FooSerializer

Когда я делаю POST запрос к /foo/, если нет столкновения, я просто хочу поведение по умолчанию (создать новый ряд в базе данных и вернуть его сериализованную форму в виде json-блоба).

Проблема в том, что когда происходит существующее столкновение, сервер просто выбрасывает ошибку. Я бы предпочел, чтобы он возвращал json blob для существующих данных, а не выкидывал ошибку. Или, по крайней мере, возвращать какую-то описательную ошибку.

Есть ли способ добиться такого поведения без ручного переопределения create()?

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