Как использовать `full_clean` в Django, используя базу данных не по умолчанию

Предыстория: Я модифицирую нашу кодовую базу, чтобы использовать несколько баз данных для проверки файлов загрузки, предоставленных пользователями. Это нужно для автоматической проверки данных пользователей, чтобы они могли исправлять простые проблемы со своими файлами, например, проверять уникальность и т.п. Первоначально мы ошибочно использовали TestCase, чтобы обернуть наши команды загрузки и запустить код настройки тестовой базы данных для создания и уничтожения тестовой базы данных. Если бы наш первоначальный код был построен иначе, я бы просто использовал transaction.atomic, и хотя в будущем может произойти рефакторинг, чтобы исправить это должным образом, чтобы уменьшить усилия и быстро выпустить исправление ошибки валидации в недавно выпущенной бета-версии, я вставляю using во всех необходимых местах, чтобы использовать вторую "базу данных валидации").

В итоге (для использования базы данных, отличной от базы данных по умолчанию) я получаю следующее:

db = "validation"
Compound.objects.using(db).get(...)

и:

db = "validation"
for compound in self.validated_new_compounds_for_insertion:
    compound.save(using=db)

Но когда я впервые протестировал код, я столкнулся с ошибкой:

django.core.exceptions.ValidationError: {'name': ['Compound with this Name already exists.'], 'hmdb_id': ['Compound with this HMDB ID already exists.']}

исходя из последней строки этого кода валидации:

new_compound = Compound(
    name=row[self.KEY_COMPOUND_NAME],
    formula=row[self.KEY_FORMULA],
    hmdb_id=row[self.KEY_HMDB],
)
new_compound.full_clean()

Я просмотрел full_clean в документации по django 3.2, но я не вижу способа запустить его с базой данных, отличной от базы данных по умолчанию.

Я очистил базу данных проверки перед запуском тестовой нагрузки, и нагрузка работает нормально, если я стираю базу данных по умолчанию, поэтому я знаю, что это не проблема с загружаемыми данными.

Но я также хочу, чтобы данные, предоставленные пользователем, проверялись на соответствие текущим данным, которые уже загружены в базу данных для проверки...

Итак, как я могу запустить full_clean на базе данных, отличной от базы данных по умолчанию?

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