Django:如何检查自定义小部件定义中是否存在字段错误?
我想创建一些小部件,当相关字段出现错误时,它们会将特定类添加到元素标记中 我很难从widget定义代码中找到有关如何检查字段是否有相关错误的信息 目前,我有以下存根小部件代码(最终的小部件将使用更复杂的标记) 来自django导入表单的Django:如何检查自定义小部件定义中是否存在字段错误?,django,django-forms,django-widget,Django,Django Forms,Django Widget,我想创建一些小部件,当相关字段出现错误时,它们会将特定类添加到元素标记中 我很难从widget定义代码中找到有关如何检查字段是否有相关错误的信息 目前,我有以下存根小部件代码(最终的小部件将使用更复杂的标记) 来自django导入表单的 从django.utils.safestring导入标记_safe 类CustomTextWidget(forms.Widget): def呈现(自身、名称、值、属性): field_has_errors=False#以某种方式更改以动态反映field erro
从django.utils.safestring导入标记_safe
类CustomTextWidget(forms.Widget):
def呈现(自身、名称、值、属性):
field_has_errors=False#以某种方式更改以动态反映field errors
如果字段\u有\u错误:
错误\u class\u string=“错误”
其他:
错误\u class\u string=“”
安全返回标记(
“”%(错误\u类\u字符串、值、名称、名称)
)
有人能解释一种合理的方法来填充这个字段吗?(或者提出一个更好的方法来完成我的目标)。提前感谢。小部件不知道应用它的字段。该字段维护有关错误的信息。您可以在表单的init方法中检查错误消息,并相应地向小部件注入错误类:
class YourForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(YourForm, self).__init__(*args, **kwargs)
attrs = {}
if self.fields['your_field'].error_messages is not None:
attrs['class'] = 'errors'
self.fields['your_field'].widget = YourWidget(attrs=attrs)
正如Jason所说,小部件无法访问字段本身。我认为更好的解决方案是使用CSS的级联特性
{% for field in form %}
<div class="field{% if field.errors %} field_error{% endif %}">
{{ field }}
</div>
{% endfor %}
或者你需要的任何东西。这绝对是一条路,实际上也是我在自己的工作中经常采用的方法。我提供的示例是拼凑在一起的,目的是展示属性传递给小部件(不仅仅是自定义小部件),但是应该避免,因为它不是干的。两年后,它帮助了我。谢谢:)为什么他们不把错误信息传递给小部件呢?对我来说这似乎是合理的,因为在字段的输入旁边呈现错误是很常见的。干法回答要好得多
{% for field in form %}
<div class="field{% if field.errors %} field_error{% endif %}">
{{ field }}
</div>
{% endfor %}
div.field_error input { color: red }