2016-07-13 13 views
1

FormGet ausgewählten Wert von Django ModelChoiceField Form

class AddressForm(forms.Form): 
    Country = forms.ModelChoiceField(queryset=Country.objects.filter(Enabled=True), empty_label="Select Country", widget=forms.Select(attrs={'class':'form-control'})) 

html

<form method="POST" action=""> 
    {% csrf_token %} 
    . 
    . 
    <div class="form-group col-md-4"> 
    {{ addressForm.Country }} 
    </div> 
</form> 

Ansicht

addressForm = AddressForm(request.POST, prefix="AddressForm") 
country = addressForm['Country'] 

Aber das Land Variable enthält das gesamte HTML-Element anstelle des gewählten Wertes. Die gleichen Probleme treten bei jedem Feld in Formularen wie forms.CharField

auf Wie kann ich den ausgewählten Wert aus Formularelementen abrufen?

+0

Warum greifen Sie überhaupt darauf zu? Ist das nach der Validierung? – Sayse

+0

Ich muss die Daten aus dem AddressForm an das Modell Address-Objekt übergeben, um die .save-Methode (?) Aufzurufen – John

Antwort

2

Ich brauche die Daten aus dem Address zum Modell Adresse Objekt zu übergeben die .save Methode aufzurufen (?)

Dann sollten Sie wahrscheinlich nur eine model form

class AddressForm(forms.Form): 
    class Meta: 
      model = Address 
werden unter Verwendung

Sie können dann einfach anrufen form.save() und lassen Sie Django die Magie für Sie tun.

In jedem Fall sollten Sie is_valid aufrufen, bevor Sie versuchen, auf Daten zuzugreifen. Dadurch wird das cleaned_data Wörterbuch des Formulars verfügbar gemacht, das alle Formularwerte nach der Überprüfung enthält.

+0

Ich wusste davon, aber ich musste einige Hindernisse überwinden: 1) Ich konnte meine eigenen CSS-Klassen auf die Eingabeelemente anwenden 2) Ich konnte eine Dropdownliste für ein Modellfeld vom Typ .ForeignKey (Country ....) erstellen. – John

+1

@John - Wenn Sie andere Fragen haben, sollten Sie überlegen, sie als neue Fragen mit dem, was Sie versucht und erforscht haben, zu erheben. Wenn eine dieser Antworten diese Frage löst, sollten Sie in Betracht ziehen, sie zu akzeptieren – Sayse

2

So erhalten Sie einen Feldwert: indem Sie is_valid() anrufen und dann form.cleaned_data[fieldname].

+0

Kann ich form.data [Feldname] anstelle von form.cleaned_data [Feldname] verwenden. –

+0

Nein. Das sind die Rohdaten aus der Post. –

+0

Ich benutze form.data [Feldname] für den Erhalt von Datensatz von Modelchoicefield aus Formular, Da Formular sendet mir wählen (Dropdown-Liste) anstelle von Wert. Ist es falsch oder ein Sicherheitsproblem? –

Verwandte Themen