如何使用Django get_or_create()应用(冲突时不执行任何操作)

时间:2019-05-04 21:30:26

标签: django django-views

假设名字和姓氏在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 NOTHING。 Django中执行此操作的最佳方法是什么? 谢谢

1 个答案:

答案 0 :(得分:0)

如果要在数据库中插入重复的密钥,则可以尝试捕获应该引发的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