当特定字段发生 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 %}
比方说,我有一个 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 %}