Django - при использовании разных баз данных - я должен использовать & ldquo; using & rdquo; или & ldquo; db_manager & rdquo ;?

Удивительно для меня, я пробовал это, и кажется, что он работает:

[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert

Я еще не знаю, по какой магии он работает, поэтому ваши объяснительные комментарии оценены. :)

(Примечание: после того, как я нашел, что использование квадратного скобки-типа-типа, как я делал выше, может также привести к другим ошибкам, таким как «Невозможно преобразовать значение» System.Byte [] »в введите «System.Security.Cryptography.X509Certificates.X509Certificate». Ошибка: «Не удается найти запрошенный объект». Явный подход New-Object, рекомендованный Кейтом, кажется лучше!) [/ ​​g2]

1
задан Laimonas Sutkus 27 February 2019 в 09:09
поделиться

1 ответ

Это зависит от вашей ситуации. Если вы не используете метод менеджера , тогда using() хорошо, в противном случае вам понадобится db_manager().

Вы можете выбрать базу данных для QuerySet в любой точке «цепочки» QuerySet. Просто вызовите using() на QuerySet, чтобы получить другую QuerySet, которая использует указанную базу данных.

Но если вам нужно использовать методы менеджера, это не сработает.

Следующее объяснение взято из документов :

Скажем, у вас есть собственный метод менеджера, который касается базы данных - User.objects.create_user(). Поскольку create_user() является методом менеджера, а не методом QuerySet, вы не можете сделать User.objects.using('another_db').create_user(). Метод create_user() доступен только для User.objects менеджера, но не для QuerySet объектов, полученных от менеджера. Решение состоит в том, чтобы использовать db_manager(), например так:

User.objects.db_manager('another_db').create_user(...)

db_manager() возвращает копию менеджера, привязанного к указанной вами базе данных.

0
ответ дан mehamasum 27 February 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: