Как подать заявку (в случае конфликта ничего не делать) с помощью django get_or_create () - PullRequest
0 голосов
/ 05 мая 2019

Допустим, что first_name и last_name имеют следующие значения в Models.py:

unique_together = ('first_name', 'last_name',)

и в view.py

obj, created = Person.objects.get_or_create(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

Но иногда я получаю ошибку, вызванную дублированием:Обычно в Postgres я использую ON CONFLICT DO BLACK при вставке.Как лучше всего это сделать в Джанго?Спасибо

1 Ответ

0 голосов
/ 05 мая 2019

Вы можете попытаться поймать IntegrityError, которое должно быть поднято, если в базу данных будут вставлены повторяющиеся ключи:

from django.db import IntegrityError


try:
    obj, created = Person.objects.get_or_create(
        first_name='John',
        last_name='Lennon',
        defaults={'birthday': date(1940, 10, 9)},
    )
except IntegrityError:
    pass

Подробнее об исключениях из базы данных Django можно прочитать здесь:https://docs.djangoproject.com/en/dev/ref/exceptions/#django.db.IntegrityError

...