我遇到表单错误问题。我想更改表单错误显示的字段名称。
0x0000
class Sales(models.Model):
customer = models.ForeignKey("Customer")
ctype = models.ForeignKey("Customer_type", verbose_name="Customer Type")
但错误仍然存在:
{" ctype":["嘿嘿!此字段是必填字段!"]}
我想要的是这样的
{"客户类型":["嘿嘿!此字段是必填字段!"]}
答案 0 :(得分:1)
您可以为Meta
中的字段指定标签,如下所示:
from django.utils.translation import ugettext_lazy as _
class Sales_form(forms.ModelForm):
class Meta:
model = Sales
fields = ('customer','ctype')
labels = {
'ctype': _('Customer Type'),
}
error_messages = {
'ctype' : {
'required' : _("Hey yow! this field is required!")
}
}
AFAIK没有直接的方法将模型字段&verbose_name用作表单标签。您可以使用_meta
属性:
myfield = models.IntegerField(label=MyModel._meta.get_field('myfield').verbose_name)
我的口味相当黑,因为你仍然需要通过fieldname。
您还可以使用dictionary comprehension
构建标签dict:
labels = {f.name: f.verbose_name for f in MyModel._meta.get_fields()}
但请注意这一点,因为get_fields
也会返回ManyToManyRel
,其中没有属性verbose_name
。
您也可以参考render errors部分django文档,可能会有所帮助。
如果您只想更改form.errors dict中的密钥,可以使用以下方法执行此操作:
labels = {f.name: f.verbose_name for f in MyModel._meta.get_fields()}
errors_keys = tuple(form.errors.keys())
for k in errors_keys:
form.errors[labels[k]] = form.errors[k]
del form.errors[k]
或只是form.errors[labels[k]] = form.errors.pop(k)
。
另请查看有关dict密钥替换的this问题