Как поймать IntegrityError при использовании функции ManyToMany add() с неверными идентификаторами?

У меня есть две модели (просто для примера):

class One(BaseModel):
    name = models.CharField()
    twos = models.ManyToManyField(Two)

class Two(BaseModel):
    title = models.CharField()

Когда я пытаюсь добавить список ids модели Two к модели One с помощью one.twos.add(*[id1, id2]), он работает, пока я не передам неверный id, когда это не удается

psycopg2.errors.ForeignKeyViolation: insert or update on table "one_twos" violates foreign key constraint "one_two_id_572a5216_fk_twos"
DETAIL:  Key (two_id)=(e2871924-5bb4-492e-b7c3-4c5ca3cc7f5e) is not present in table "twos_two".

django.db.utils.IntegrityError: insert or update on table "one_twos" violates foreign key constraint "one_two_id_572a5216_fk_twos"
DETAIL:  Key (two_id)=(e2871924-5bb4-492e-b7c3-4c5ca3cc7f5e) is not present in table "twos_two".

Похоже, что это не состояние гонки (упомянутое здесь Django: IntegrityError during Many To Many add()).

Мне нужно сообщить фронтенду, что такое-то id недействительно, но я не могу поймать эти два IntergityErrors, чтобы повторно вызвать мое пользовательское исключение с сообщением и id.

Буду очень признателен за любую помощь в этом вопросе.

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

two_ids_set = set(Two.objects.all().values_list("id", flat=True))

тогда вы можете проверить пересечение или различие между множествами. Например:

V Difference вернет все недопустимые идентификаторы (идентификаторы, которых нет в таблице Two)

set([id1, id2]).difference(two_ids_set)

V Пересечение вернет все действительные идентификаторы (идентификаторы, которые присутствуют в таблице Two)

set([id1, id2]).intersection(two_ids_set)
Вернуться на верх