2012-01-30 74 views
1

Django 1.2.x可以正常工作,但是Django 1.3.1中存在問題,因爲我有驗證錯誤,說明所選選項不在列表中。 我有模型形式Django 1.3.1模式表單清理方法

型號:

class Cvet(models.Model): 
    ... 
    template = models.ForeignKey(Predefinisan_tekst, blank=True, null=True, related_name='template') 
    ... 

形式:

class NoviCvetForm(forms.ModelForm): 
    class Meta: 
     model = Cvet 

    def clean(self): 
     super(NoviCvetForm, self).clean() 
     cleaned_data = self.cleaned_data 
     template = cleaned_data.get("template") 
     if template == '------': 
      cleaned_data["template"] = None 
     return cleaned_data 

現在在Django模板template是選擇字段和我手動創建<option selected="selected">------</option>在列表中的第一個選項。因此,當表單在此字段中沒有用戶選擇時提交時,request.POSTtemplate字段的值作爲------發送給無效選項。我需要在clean方法中將該字段的值更改爲無?

+0

這對我來說看起來很好 - 你確定你有(a)重新啓動服務器(b)爲你的支票獲得了正確的值嗎?另外,如果你沒有調用超類的clean類型,可能值得檢查是否有區別。 – Marcin 2012-01-30 19:23:24

+0

我試着也沒有'超(NoviCvetForm,self).clean()'但結果是一樣的。並且是服務器重新啓動並且值是'------'。 – Goran 2012-01-30 19:30:20

回答

2

這是因爲None不是列表中的值。我不確定你是如何得到這個版本與之前版本的Django一起工作的,因爲這個問題在那裏是一樣的。不過,您必須在cleaned_data陣列中存儲有效值(從choices),否則它將無法通過驗證。

如果您想要在-----被選中時實際存儲None,則爲此重寫save方法。