【问题标题】:Django 1.3.1 model form clean methodDjango 1.3.1 模型表单清理方法
【发布时间】:2012-02-22 13:48:06
【问题描述】:

Django 1.2.x 可以很好地处理这些问题,但 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 方法中更改什么才能将该字段的值设为无?

【问题讨论】:

  • 这对我来说很好 - 你确定你 (a) 重新启动了服务器 (b) 得到了正确的支票值吗?此外,如果您不调用 clean 的超类版本,是否存在差异可能值得检查。
  • 我也尝试不使用super(NoviCvetForm, self).clean(),但结果是一样的。是的,服务器已重新启动,值为------

标签: django django-forms


【解决方案1】:

这是因为None 不是列表中的值。我不确定你是如何让它与以前版本的 Django 一起工作的,因为那里的问题是一样的。不过,您必须在cleaned_data 数组中存储一个有效值(来自choices),否则它永远不会通过验证。

如果您想在选择----- 时实际存储None,则为此覆盖save 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多