2016-08-02 63 views
0

我該如何指定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.cleanModelForm.is_validModelForm.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.cleanModelForm.save等)什麼是等效using='foo'

回答

0

除非有人能找到一種方法來做到這一點是使用ModelForm接口的要求,我只能得出結論Django還提供了沒有辦法做到這一點ModelForm API,因爲它主張。

相關問題