2012-01-30 73 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方法。