2013-04-13 20 views
13

Tôi có mẫu đơn này:giá trị ban đầu cho lĩnh vực hình thức django lựa chọn bỏ qua

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

Các lựa chọn có sẵn là:

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

Quan điểm:

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

Và mẫu:

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

Vấn đề là ngay cả khi giá trị ban đầu được đặt chính xác và tôi có thể kiểm tra nó trong gỡ lỗi (ví dụ: giá trị ban đầu của trường "nhà cung cấp" là bộ tôi muốn), html cuối cùng luôn hiển thị phần tử đầu tiên trong chọn hộp:

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

..trong khi đó tôi mong muốn có tùy chọn "mặc định" hoặc "hoạt động". Xin lưu ý rằng trường tên người dùng được khởi tạo chính xác. Làm cách nào để tôi có thể điều tra thêm để tìm ra vấn đề ở đâu?

Trả lời

12

Bạn cần phải vượt qua giá trị option thay vì tuple trong initial dữ liệu:

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

gì nếu bạn muốn tự động vượt qua các lựa chọn dựa trên args của xem? – radtek

+1

Đó là một câu hỏi hay. đó là những gì tôi đã bị mắc kẹt vào ngày hôm nay. Bạn có giải pháp nào cho điều đó không? – user1159517