看看這個Django的ORM代碼:在Django中,我可以在創建對象時指定數據庫嗎?
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)
,或者是來不及做,因爲那些標誌在構造函數中使用,並且只能在構造函數中設置?