2011-11-02 17 views
6

Django的ORM支持通过基于过滤器的操作使用.using()函数从特定数据库(在项目中定义多个时)进行查询。在多个数据库中使用Django ORM get_or_create

例如MyModel.objects.filter(name='Bob').using('my_non_default_database')

如何通过类MyModel()或类似get_or_create()的快捷方式创建新记录时做相同的操作?

回答

10

using是在MyModel.objects经理的方法,所以你可以做

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

如果你有一个为MyModel例如,你可以使用using关键字来指定该数据库保存到。 django docs指出了一些问题。

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

它是如何处理常规模型创建?例如MyModel(name ='bob') – Cerin

+1

保存有一个关键字参数'using'。我已经更新了我的答案。 – Alasdair

4

using只是标准查询链的一部分。因此,在将查询发送到数据库之前,您可以在任何位置使用它。 get_or_createfilter不同,它是原子的:当你调用它时,它立即执行它,因此在此之前你只需要调用using

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