2013-04-13 9 views
13

mam ten formularz:początkowa wartość dla pola wyboru formularza django ignorowane

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]) 

Dostępne opcje to:

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

Widok:

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

A szablon:

<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> 

Problem polega na tym, że nawet jeśli wartość początkowa jest poprawnie ustawiona i mogę przetestować ją w debugowaniu (tj. Początkową wartością pola formularza "dostawca" jest krotka), ostateczny html zawsze pokazuje pierwszy element w wybierz pole:

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

.. gdybym oczekiwał, że ma opcję "domyślną" lub "aktywną". Należy pamiętać, że pole nazwa użytkownika zostało poprawnie zainicjowane. Jak mogę zbadać dalej, aby dowiedzieć się, gdzie jest problem?

Odpowiedz

12

Trzeba przekazać wartość zamiast krotki option w initial danych:

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

Co jeśli chcesz dynamicznie przekazać wyborów w oparciu o args widoku za? – radtek

+1

To świetne pytanie. Właśnie to utknąłem dzisiaj. Czy masz jakieś rozwiązanie? – user1159517