2016-06-10 6 views
0

Wie kann ich die Datenbank angeben, die verwendet wird, wenn ein ModelForm seine Daten speichert?Verwenden Sie eine bestimmte Datenbank mit einem ModelForm

Die multiple-database support in Django bedeutet, dass ich mehr Datenbanken als nur die default definieren kann. Zum Beispiel:

from django import models 

class Foo(models.Model): 
    # … 

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

A ModelForm Unterklasse auch mit der Datenbank interagiert:

from django import forms 

from .models import Foo 

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

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

Wie kann ich

# settings.py 

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

Dies ist ein Modell-Manager eine andere Datenbank aus dem Standard abfragen kann geben Sie an, dass die FooModelForm Instanz die staging Datenbank verwenden soll, wenn ich form.save()? Ich kann keinen Ort sehen, an dem das Äquivalent von using('staging') angegeben werden kann.

Antwort

0

Die Model.save method nimmt die using Parameter zur Angabe der Datenbank speichern:

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

Die ModelForm.save method die zurück Model Beispiel:

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

Die ModelForm.save Verfahren kann optional gesagt werden, nicht zu begehen:

foo_form.save(commit=False) 

Dass sie alle zusammen:

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

welcher Form auch immer jetzt erste begehen nicht dann Sie das Modellobjekt bekommen und es using

f = form.save(commit=False) 
f.save(using='staging') 
Verwandte Themen