gpt4 book ai didi

django verbose_name 不起作用

转载 作者:行者123 更新时间:2023-12-04 04:40:04 26 4
gpt4 key购买 nike

所以我有一个名为 Users 的模型,它有一个名为 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)

然后我创建了一个用户窗体,然后在我的模板页面中,当显示任何错误消息时,它不使用详细名称,而是使用 first_name。例如,我的显示错误模板代码是
{% for field, error in form.errors.items %}
{% if forloop.counter == 1 %}
{{ field }}{{ error | striptags }}
{% endif %}
{% endfor %}

如果 first_name 字段中有错误,比如我没有填写但仍然点击提交,它会显示这个

“first_name此字段为必填项”
怎么让它显示
“名字这个字段是必需的”?

并不是说它可能会有所不同,但请注意,我正在使用 South 和 schemamigration 来更新数据库,它最初没有详细的名称,但我最近添加了它,然后只是保存了文件(我没有执行 schemamigration 和然后迁移该应用程序,因为它说似乎没有进行任何更改)。

我的用户表单是这样的:
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)

最佳答案

form.errors是字段 NAMES 作为键和错误消息作为值的字典。它不会是 verbose_name .您需要从表单中获取字段,然后执行 field.labelverbose_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 %}

关于django verbose_name 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com