动态自定义 django 表单小部件

Posted

技术标签:

【中文标题】动态自定义 django 表单小部件【英文标题】:Dynamically customize django form widgets 【发布时间】:2011-06-12 06:02:12 【问题描述】:

如果字段无效,我特别想添加一个error 类。所以它会像这样呈现:

<input type="text" name="email" class="error" />

这个例子看起来很老套,我还没有看到任何其他的例子来说明如何做到这一点。

http://jj.isgeek.net/2010/10/27/add-error-class-to-widgets-with-errors-in-django-forms/

是否可以全局覆盖默认小部件模板?如果该字段是必需的,我希望拥有像 required (或 html5 required attr)这样的类,以便可以首先使用 javascript 对其进行验证。例如,随着新的 html5 输入类型的出现,我希望能够将 type="number" 用于整数字段。

我已经阅读了这些文档,但并没有太大帮助。 http://docs.djangoproject.com/en/dev/ref/forms/widgets/#customizing-widget-instances

编辑 显然有一个required_css_classerror_css_class 用于表单。但是,我正在使用 modelForms,这似乎不起作用。

【问题讨论】:

【参考方案1】:

不幸的是,除了您已经使用标准 django 识别的 hack 之外,没有简单的方法。

是否可以全局覆盖默认小部件模板?

django 开发人员正在讨论如何解决这个问题。

目前,最吸引您的解决方案应该是使用 django 核心开发人员 Carl 的外部包:django-form-utils,它允许您覆盖模板、包含任意类和包含字段集。

并且,在您的 forms.py 中包含以下内容

from form_utils.forms import BetterModelForm as ModelForm

【讨论】:

form_utils 看起来是个不错的替代品,感谢您的提示。

以上是关于动态自定义 django 表单小部件的主要内容,如果未能解决你的问题,请参考以下文章

使用 RadioSelect 小部件自定义 Django 表单

Django 酥脆的表单可以与自定义小部件一起使用吗?

Django Admin:仅对一个模型字段使用自定义小部件

自定义 django 小部件 - decompress() arg 未填充

自定义 Django 小部件/字段:对象没有属性“attrs”

Django SelectMultiple 小部件的动态选择