当特定字段发生 Django ValidationError 时,如何向模板发送附加数据?

How to send additional data to the template when Django ValidationError occurred on a specific field?

比方说,我有一个 Django 表单 - XYZ,它有字段 A、B、C。字段 B 是用户名字段,当特定用户名已经存在时,会发生验证错误并返回一条消息。与此同时,我想向模板发送一些自动建议的用户名字典。 据我了解,我只能发送字段错误和非字段错误。

def clean_B(self):
        B = self.cleaned_data['B']
        if address.objects.filter(B=B).exists():
            raise forms.ValidationError("Username already exists")
        return B

我尝试使用 Form.add_error() 添加另一个错误,Django 不允许每个字段在单个字典中出现多个错误或 Non_field 个错误。

我该怎么做?

谢谢!

我认为您可以使用 django messages framework 向用户显示您的消息和建议。

from django.contrib import messages

...

def clean_B(self):
    B = self.cleaned_data['B']
    if address.objects.filter(B=B).exists():
        # In __init__ method of the form, you should store request as property
        messages.info(self.request, 'You should use another username, i.e. John')
        raise forms.ValidationError('Username already exists')
    return B

然后,在模板的某处输出消息:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}