Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何检查自定义小部件定义中是否存在字段错误?_Django_Django Forms_Django Widget - Fatal编程技术网

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

我想创建一些小部件,当相关字段出现错误时,它们会将特定类添加到元素标记中

我很难从widget定义代码中找到有关如何检查字段是否有相关错误的信息

目前,我有以下存根小部件代码(最终的小部件将使用更复杂的标记)

来自django导入表单的

从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 }