2011-08-24 1276 views
1

我有一個由2個ChoiceField和一個CharField組成的表單。當選擇第一個項目時,第二個ChoiceField通過ajax填充。Django表單不驗證:「選擇一個有效的選項.20不是可用的選項之一」

模板填充它是這樣的:

{% for a in assets %} 
<option value="{{ a.asset_id }}">{{ a.asset_name }}_{{ a.asset_description }}</option> 
{% endfor %} 

當我嘗試提交我得到以下錯誤的形式:

Select a valid choice. 20 is not one of the available choices. 

指向第二ChoiceField,20對應於{所選項目的{a.asset_id}}。

我在其他論壇看到這個錯誤,但它幾乎總是由於multipleChoiceField這不是我的關注。

我在做什麼錯?

+0

表單中ChoiceField的'choices'值是什麼? –

+0

在表單I中,選擇的值首先包含'[('',' - choisir un type en premier')]',然後根據第一個CHoiceField中選擇的項目添加一些選項標籤。 – Johanna

+1

你添加選項標籤,使用Javascript?這很糟糕,因爲Django會拒絕所有不在「選項」中的選定內容。相反,您應該動態更改視圖中「選擇」的值。 –

回答

4

ChoiceField需要設置choices。這些不僅僅決定下拉列表中顯示的內容,而且對於您來說非常重要,它還決定了提交表單時應接受哪些值。

讓我來解釋一下你的情況是怎麼回事。你有你的選擇,最初設置爲:

CHOICES = (
    ('', '-- choisir un type en premier') 
) 

這意味着,將被接受的唯一的事情是一個空白的選擇(元組,''中的第一項,是該領域的實際價值,並choisir...是文本值)。

因此,當您通過Javascript添加<option>元素時,它們的值將不在CHOICES中,因此當您提交該表單時,它們將被Django拒絕。 10不在CHOICES

表單提交的視圖應查看提交給它的選項的值,然後相應地更改傳遞給ChoiceField的值CHOICES

+0

選擇的元組不是這種形式,我動態地添加標籤。我嘗試添加和刪除「

+0

如何訪問視圖中ChoiceField的選項? – Johanna

+0

在處理表單的視圖中添加選項在[這裏](http://stackoverflow.com/a/28408178/3922554) – jfn

相關問題