2011-11-02 2 views
6

L'ORM de Django prend en charge l'interrogation à partir d'une base de données spécifique (lorsque plusieurs sont définis dans votre projet) via la fonction .using() pour les opérations par filtre.Utilisation de Django ORM get_or_create avec plusieurs bases de données

par exemple. Comment faire l'équivalent lors de la création de nouveaux enregistrements, via la classe MyModel() ou un raccourci comme get_or_create()?

Répondre

10

using est une méthode sur le gestionnaire MyModel.objects, de sorte que vous pouvez faire

MyModel.objects.using('my_non_default_database').get_or_create(name="Bob") 

Si vous avez une instance de MyModel, vous pouvez utiliser le mot-clé en utilisant pour spécifier la base de données pour enregistrer. Le django docs souligne quelques pièges.

my_model = MyModel(name="Bob") 
my_model.save(using='my_non_default_database') 
+0

Comment est-il géré pour la création régulière de modèles? par exemple. MyModel (name = 'bob') – Cerin

+1

L'enregistrement a un argument "using". J'ai mis à jour ma réponse. – Alasdair

4

using est juste une partie de la chaîne de requête standard. Vous pouvez donc l'utiliser n'importe où avant que la requête ne soit envoyée à la base de données. get_or_create, contrairement à filter, est atomique: quand vous l'appelez, il fait sa chose immédiatement, donc vous avez juste besoin d'appeler using avant cela.

MyModel.objects.using('my_non_default_database').get_or_create(name='Bob') 
Questions connexes