2017-06-19 6 views
0

Ich verwende Django, um ein Formular zu digitalisieren. Diese Form ist ein bisschen komplex und es gibt viele Felder darin. Ich habe mich gefragt, ob Django form.cleaned_data [] für alle Felder ausführen könnte, anstatt Variablen wie obj.fieldname = form.cleaned_data['fieldname'] für jedes Feld zu deklarieren.django - form.cleaned_data [] für alle Felder im Modell

Ich versuchte es mit einem forloop im views.py, aber das wird nicht funktionieren

Dies ist forloop ich spreche:

def get_form_naw(request): 
    if request.method == 'POST': 
     form = Form1(request.POST) 
     if form.is_valid(): 
      for x in Model1(): 
       formname = x.name 
       o = Model1() 
       o.formname = form.cleaned_data[formname] 
      o.save() 
    else: 
     form = Form1 
    return render(request, 'folder/home.html', context=locals()) 

Ich verwende ein MySQL-Datenbank. Meine Formen werden wie folgt erklärt: forms.py

class Form1(forms.ModelForm): 

    class Meta: 
     model = Model1 
     exclude = ('id') 
+2

Sie könnten direkt speichern Sie das Formular um das Objekt zu erstellen. Warum müssen Sie das Objekt Feld für Feld erstellen? – Rohan

+0

Ihrem Ausschluss fehlt ein abschließendes Komma, d. H. '('Id',)'. Sie sollten das Feld "id" jedoch nicht ausschließen, da es standardmäßig nicht enthalten ist. – Alasdair

Antwort

1

Sie sollten nicht durch die Felder Schleife haben. Sie verwenden eine Modellform, so sollten Sie nur save die Form:

if form.is_valid(): 
    obj = form.save() 
    ... 

Wenn Sie wirklich Felder dynamisch müssen setzen, Sie setattr verwenden können.

fieldname = 'username' 
value = 'my_user' 
setattr(obj, fieldname, value) 
0

können Sie die Instanz der Daten erhalten, wie dies vor Sparend:

if form.is_valid(): 
    obj = form.save(commit=False) #get instance without saving 
    # do your thing 
    obj.save() #save into database 
Verwandte Themen