Django更改表单字段错误消息

时间:2016-07-16 03:17:56

标签: python django

我遇到表单错误问题。我想更改表单错误显示的字段名称。

models.py

0x0000

forms.py

class Sales(models.Model):
    customer = models.ForeignKey("Customer")
    ctype = models.ForeignKey("Customer_type", verbose_name="Customer Type")

但错误仍然存​​在:

{" ctype":["嘿嘿!此字段是必填字段!"]}

我想要的是这样的

{"客户类型":["嘿嘿!此字段是必填字段!"]}

http://pastebin.com/w6UkjzHF

1 个答案:

答案 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问题

相关问题