因此,我有一个名为用户的模型,它有一个名为first_name的字段。
class Users(models.Model):
alpha_field = RegexValidator(regex=r'^[a-zA-Z]+$', message='Name can only contain letters')
user_id = models.AutoField(unique=True, primary_key=True)
username = models.SlugField(max_length=50, unique=True)
first_name = models.CharField(max_length=50, verbose_name='first Name', validators=[alpha_field])
last_name = models.CharField(max_length=50, validators=[alpha_field])
password = models.SlugField(max_length=50)然后我创建了一个UsersForm,然后在我的模板页面中,当显示任何错误消息时,它不使用冗长的名称,而是使用first_name。例如,用于显示错误的模板代码是
{% for field, error in form.errors.items %}
{% if forloop.counter == 1 %}
{{ field }}{{ error | striptags }}
{% endif %}
{% endfor %}如果first_name字段中有错误,就像我没有填写它并仍然单击submit一样,它将显示如下
"first_nameThis字段是必需的“如何使它显示”第一个NameThis字段是必需的“?
这并不是说它可能会产生不同的效果,但请注意,我使用的是南方和模式迁移来更新数据库,它最初没有详细的名称,但我最近添加了它,然后保存了该文件(我没有进行架构迁移,然后迁移该应用程序,因为它说似乎没有做任何更改)。
我的UsersForm是:
from django import forms
from models import Users
class UsersForm(forms.ModelForm):
class Meta:
model = Users
widgets = {'password':forms.PasswordInput()}
def __init__(self, *args, **kwargs):
super( UsersForm, self ).__init__(*args, **kwargs)
self.fields[ 'username' ].widget.attrs[ 'placeholder' ]="Username"
self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"
self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"
self.fields['first_name'].label='first Name'我的看法是:
def home_page(request):
form = UsersForm()
if request.method == "POST":
form = UsersForm(request.POST)
if form.is_valid():
form.save()
c = {}
c.update(csrf(request))
c.update({'form':form})
return render_to_response('home_page.html', c)发布于 2013-09-26 22:41:06
form.errors是作为键的字段名和作为值的错误消息的字典。它不会是verbose_name。您需要从表单中获取字段,然后对field.label进行verbose_name操作。如果您使用此代码片段动态地在模板:https://snipt.net/Fotinakis/django-template-tag-for-dynamic-attribute-lookups/中获取对象上的属性,则可以执行如下操作以获得verbose_name
{% load getattribute %}
{% for field, error in form.errors.items %}
{% if forloop.counter == 1 %}
{% with field_obj=form|getattribute:field %}
{{ field_obj.label }}{{ error | striptags }}
{% endwith %}
{% endif %}
{% endfor %}发布于 2013-09-25 22:36:34
不久前我也遇到了类似的问题,这个片段帮助我解决了这个问题:
from django import template
from django import forms
from django.forms.forms import NON_FIELD_ERRORS
from django.forms.util import ErrorDict
register = template.Library()
@register.filter
def nice_errors(form, non_field_msg='General form errors'):
nice_errors = ErrorDict()
if isinstance(form, forms.BaseForm):
for field, errors in form.errors.items():
if field == NON_FIELD_ERRORS:
key = non_field_msg
else:
key = form.fields[field].label
nice_errors[key] = errors
return nice_errorshttp://djangosnippets.org/snippets/1764/
https://stackoverflow.com/questions/19015990
复制相似问题