如何在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 :(得分:3)
无论什么形式先不提交,现在你得到模型对象并保存using
f = form.save(commit=False)
f.save(using='staging')
答案 1 :(得分: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')