2014-01-30 35 views
0

我有一個Django窗體與兩個ChoiceFields。我將把它們稱爲CF1和CF2。現在,CF1顯示一個車型列表。 CF2保持空白,直到在CF1中選擇了一個選擇,然後我的JQuery接管CF2並使用該車型。例如:日產 - >千里馬。我將Django表單的ChoiceField的初始值設置爲無效的值是什麼?

from django import forms 

cars = (('', '----'), ('1', 'Toyota'), ('2', 'Nissan'), ('3', 'Ford'), ('4', 'Honda')) 

class SearchForm(forms.Form) 
    model = forms.ChoiceField(choices=cars required=True) 
    make = forms.ChoiceField(required=True) 

    def clean(self): 
     cleaned_data = super(SearchForm, self).clean() 
     mo = cleaned_data.get("model") 
     ma = cleaned_data.get("make") 

     if not mo or not ma: 
      raise forms.ValidationError("blahblah") 
     return cleaned_data 

形式只有的用戶在這兩個ChoiceFields選擇應視爲有效。但是,無論我是否將選擇留空,我提交的表單總是無效的。現在,我知道對於一個ChoiceField,總是有一個默認的初始值,對吧?但是有沒有辦法將ChoiceField的有效標誌設置爲無效,直到選擇某個標誌被切換爲有效的點爲止?

view.py

def car_info(request): 
    form = SearchForm(request.GET) # a form bound to the GET data 
    if form.is_valid(): # never seems to be pass this test 
     return render(request, "car.html", {}) 
    else: # always ends up here 
     form = SearchForm() # an unbound form 
     return render(request, "find.html", {'form': form}) 

find.html

{% if form.errors %} 
     <div class="err">{{ form.errors | pluralize }}</div> 
    {% endif %} 

    <form action="{% url "msite.views.car_info" %}" method="GET" name="listform"> 
     {{ form.model }} 
     {{ form.make }} 
     <button>Find</button> 
    </form> 
+0

希望這有助於:http://tech.nickserra.com/2011/06/03/django-forms-adding-a-blank-option-to-a-required-choice -field/ –

+0

感謝您的評論。我確實試圖希望它能起作用,但沒有。現在我的ChoiceField同時顯示了一個值爲''和'-----'的值。儘管如此,一切都恢復無效。我在我的問題中添加了更多代碼。 – noblerare

+0

既然你的第二個ChoiceField沒有「選擇」,django不知道如何驗證它,這就是爲什麼它總是失敗。您需要覆蓋表單的'save'方法,以確保兩個字段的組合使表單有效或無效。 –

回答

0

你在你的代碼中的一些錯誤:

class SearchForm(forms.Form) 
    model = forms.ChoiceField(choices=cars required=True) 
    make = forms.ChoiceField(required=True) 

變化:

class SearchForm(forms.Form) 
    model = forms.CharField(max_length=20, choices=cars, default=cars[0][0]) 
    # add other code if you like 
+0

感謝您的回覆。你確定它是'CharField'嗎?我希望它成爲'ChoiceField' – noblerare

相關問題