将特定数据库与ModelForm一起使用

时间:2016-06-10 05:56:49

标签: django django-models django-forms

如何在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')的地方。

2 个答案:

答案 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')