我該如何指定Django ModelForm應該使用哪個數據庫(通過其別名)?指定Django ModelForm實例的數據庫
A Django ModelForm知道其相應的模型,幷包括字段。
ModelForm
實例明確知道如何在內部指定數據庫。它可以根據數據庫驗證其字段,並可以將新的模型實例保存到數據庫中。這意味着其操作知道要使用哪個數據庫。
我找不到如何指定默認,其他任何數據庫創建時ModelForm
也不當它與數據庫::
import csv
from cumquat_app.forms import CumquatImportForm
db_alias = 'foo'
reader = csv.DictReader(input_file)
for row in reader:
fields = make_fields_from_input_row(reader)
# Wanted: ‘form = CumquatInputForm(fields, using=db_alias)’.
form = CumquatImportForm(fields)
# Wanted: ‘if form.is_valid(using=db_alias)’.
if form.is_valid():
# Wanted: ‘form.save(using=db_alias)’.
form.save()
我需要的是指定數據庫別名作爲交互在ModelForm
的外部用戶,當創建實例或當調用ModelForm.clean
或ModelForm.is_valid
或ModelForm.save
等
用同樣的方法,我可以用QuerySet.using('foo')
, 或Model.save(using='foo')
的'使用'鉤子。
注意,這不是爲多數據庫路由策略配置工作。用例是我需要指定一個只在運行時已知的數據庫。如果連接失敗,它不應該回落到任何其他的,所以數據庫路由是這個釘子的錯誤錘子。
我可以request the
ModelForm.save
method to not commit its change(與commit=False
),然後直接使用Model.save
。這並沒有解決訪問數據庫的ModelForm
的其他行爲,所以它不是解決這個問題的方法。A
ModelManager.db_manager
可以做這項工作,如果我使用它來創建模型實例。但是我依靠表單來創建實例;我無法創建模型實例,因爲我沒有要分配的字段值。這是表格的工作。如果它的事項:這是一個管理命令,在這裏我需要能夠 在命令行特定數據庫別名是一個命令 上下文指定。
爲模型實例化時ModelForm
,或者調用其方法(ModelForm.clean
,ModelForm.save
等)什麼是等效using='foo'
?