Как проверить уникальность bulk_create

В Django есть метод get_or_create, гарантирующий уникальность объекта. Но когда записей для добавления много больше 1000 обработка занимает много времени (как 1000 запросов на создание объектов). Я знаю про bulk_create, но он не проверяет уникальность входных атрибутов модели. Как ускорить добавление уникальных объектов в базу данных? Если возможно за 1 запрос.

Пример модели:

models.py

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

admin.py

# Create only one element (What I want to get)
_, created = Person.objects.get_or_create(first_name='Leon', last_name='Mariano')
_, created = Person.objects.get_or_create(first_name='Leon', last_name='Mariano')

# Create 2 objects with different ID
Person.objects.bulk_create(Person(first_name='Leon', last_name='Mariano'),
                           Person(first_name='Leon', last_name='Mariano'))

Спасибо Ivan за помощь. Решение следующее:

models.py

from django.db.models import UniqueConstraint

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    
    class Meta:
        constraints = [
            UniqueConstraint(fields=['first_name', 'last_name'], name='unique person')
        ]

admin.py

Person.objects.bulk_create((
    Person(first_name='fname', last_name='lname'),
    Person(first_name='fname', last_name='lname'),
    Person(first_name='fname2', last_name='lname2'),
), ignore_conflicts= True)
Вернуться на верх