2013-04-13 11 views
13

Ich habe diese Form:Anfangswert für django Form Auswahlfeld ignoriert

class UserUsesSourceForm(forms.Form): 
    # some fields here 
    username = forms.CharField(label=("Username"), max_length=30, help_text = ("Required")) 
    provider = forms.ChoiceField(widget=forms.Select(), choices=SOURCES_CHOICES, initial=SOURCES_CHOICES[1]) 

Die verfügbaren Optionen sind:

E = 'e' 
A = 'a' 
SOURCES_CHOICES = (
        (A, 'A'), 
        (E, 'E'), 
       ) 

Aussicht:

form = UserUsesSourceForm(initial={"username":request.user.username, 'provider':SOURCES_CHOICES[1]})return render_to_response('update_datasource.html', context_instance=RequestContext(request, params)) 

Und die Vorlage:

<form action="" method="post"> 
    {% csrf_token %} 
    {% if form.non_field_errors %} 
    <p> 
     {% for error in form.non_field_errors %} 
      <div class="text-error">{{ error|escape }}</div> 
     {% endfor %} 
    </p> 
    {% endif %} 
    <div class="control-group"> 

     <label class="control-label" for="id_provider">Data source</label> 
     <div class="controls"> 
      {{form.provider}} 
     </div> 
       </div> 
</form> 

Das Problem ist, dass, selbst wenn der Anfangswert korrekt festgelegt ist, und ich es im Debug testen kann (dh der Initialwert des Formulars "Provider" ist das Tupel, das ich will), das letzte HTML immer das erste Element in der Auswahlfeld:

<select name="provider" id="id_provider"> 
<option value="A">A</option> 
<option value="E">E</option> 
</select> 

..while ich erwarten würde es eine "default" oder "aktiv" Option haben. Bitte beachten Sie, dass der Benutzername Feld korrekt initialisiert ist. Wie kann ich weiter untersuchen, um herauszufinden, wo das Problem liegt?

Antwort

12

Sie müssen den option Wert statt Tupel in initial Daten zu übergeben:

form = UserUsesSourceForm(
    initial={'username':request.user.username, 
      'provider':SOURCES_CHOICES[1][0]}) 
+1

Was passiert, wenn Sie dynamisch die Auswahl auf der args Sicht Basis passieren wollen? – radtek

+1

Das ist eine gute Frage. Das ist, was ich heute festhielt. Hast du eine Lösung dafür? – user1159517