Как сделать исключение для оракула в пользовательском поле?

ПРОБЛЕМА: Я пишу пользовательское поле модели Django. В get_db_prep_save(self, value, connection) мне нужно сделать исключение для бэкэнда oracle и вести себя иначе, чем в других бэкэндах. Поэтому я ищу лучший, официальный и самый элегантный способ сделать это.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не приму ответы, говорящие: "используйте settings.DATABASES и ищите django.db.backends.oracle", потому что это просто неправильно. Используя настройки, я не могу выяснить, какую базу данных я использую в настоящее время (по умолчанию или какую-либо другую), путь к oracle backend в будущем может измениться с django.db.backends.oracle на что-то другое. То, что я ищу, это лучший способ проверить, имею ли я дело с оракулом при сохранении настраиваемого поля в базе данных.

2 ответа

Решение

Я ненавижу отвечать на свои вопросы, но я понял, что правильный ответ:

connection.vendor

Глядя на документы

Конкретное соединение, которое будет использоваться для запроса, передается в качестве параметра соединения. Это позволяет вам использовать специфичную для бэкенда логику преобразования, если это необходимо.

Таким образом, параметр соединения может дать вам информацию о том, какой сервер вы собираетесь подключить. Параметр соединения должен быть прокси-объектом (смотрите этот код) для фактического DB_ALIAS, который будет выполнять сохранение.

Другие вопросы по тегам