2016-06-10 87 views
0

如何在ModelForm保存其数据时指定要使用的数据库?在ModelForm中使用特定数据库

multiple-database support in Django意味着我可以定义更多的数据库,而不仅仅是default。例如:

# settings.py 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': ':memory:', 
    }, 
    }, 
    'staging': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'HOST': 'db.example.com', 
     # … 
    }, 
} 

这使得模型管理器将默认查询不同的数据库:

from django import models 

class Foo(models.Model): 
    # … 

queryset = Foo.objects.using('staging').all() 

一个ModelForm类也与数据库交互:

from django import forms 

from .models import Foo 

class FooImportForm(forms.ModelForm): 
    class Meta: 
     model = Foo 
     fields = [ 
      # … 
     ] 

fields = { 
    # … 
} 
form = FooImportForm(fields) 
form.save() 

哪有我指定FooModelForm实例应该使用staging数据库,当我form.save()?我看不到一个地方在哪里指定相当于using('staging')

回答

0

Model.save method接受using参数指定数据库:

foo = Foo(fields) 
foo.save(using='staging') 

ModelForm.save method返回Model实例:

foo_form = FooImportForm(fields) 
foo = foo_form.save() 

ModelForm.save方法可任选地告知不要犯:

foo_form.save(commit=False) 

全部放在一起:

foo_form = FooImportForm(fields) 
foo = foo_form.save(commit=False) 
foo.save(using='staging') 
3

不管形式不承诺先那么现在你得到的模型对象,并将其保存using

f = form.save(commit=False) 
f.save(using='staging') 
相关问题