【发布时间】:2016-01-05 18:53:43
【问题描述】:
看看这个 Django ORM 代码:
my_instance = MyModel()
my_instance.some_related_object = OtherModel.objects.using('other_db').get(id)
此时,在第二行,Django会抛出错误:
ValueError: Cannont assign "<OtherModel: ID>": instance is on database "default", value is on database "other_db"
对我来说,这没有多大意义。如果我还没打过电话,Django 如何判断 my_instance 是哪个数据库:
my_instance.save(using='some_database')
还没有?
我猜,在构建对象期间,Django 会自动将其分配给default 数据库。我可以改变它吗?我可以在创建对象时通过将参数传递给其构造函数来指定数据库吗?根据文档,在创建对象时,我可以传递的唯一参数是其字段的值。那么我该如何解决我的问题呢?
在 Django 1.8 有一个名为 Model.from_db (https://docs.djangoproject.com/en/1.8/ref/models/instances/) 的新方法,但我使用的是早期版本的 Django,无法切换到现在更新了。查看实现它所做的只是设置两个模型的属性:
instance._state.adding = False
instance._state.db = db
那么将我的代码更改为:
my_instance = MyModel()
my_instance._state.adding = False
my_instance._state.db = 'other_db'
my_instance.some_related_object = OtherModel.objects.using('other_db').get(id)
还是因为这些标志在构造函数中使用而只能在构造函数中设置而为时已晚?
【问题讨论】:
标签: python django orm django-orm django-database