gpt4 book ai didi

python - Django 更改表单字段错误信息

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:53 24 4
gpt4 key购买 nike

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

模型.py

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

表单.py

from django.utils.translation import ugettext_lazy as _
class Sales_form(forms.ModelForm):
class Meta:
model = Sales
fields = ('customer','ctype')
error_messages = {
'ctype' : {
'required' : _("Hey yow! this field is required!")
}
}

但错误仍然返回:

{"ctype": ["嗨哟!这个字段是必需的!"]}

我想要的是这样的

{“客户类型”:[“嘿哟!此字段为必填项!”]}

http://pastebin.com/w6UkjzHF

最佳答案

您可以像这样在 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!")
}
}

据我所知,没有直接的方法可以将模型字段的 verbose_name 用作表单标签。不过,您可以使用 _meta 属性:

myfield = models.IntegerField(label=MyModel._meta.get_field('myfield').verbose_name)

我的口味很老套,因为您仍然需要传递字段名。

您还可以使用 dictionary comprehension 构建标签字典:

labels = {f.name: f.verbose_name for f in MyModel._meta.get_fields()}

但是要小心,因为 get_fields 还会返回没有属性 verbose_nameManyToManyRel

可以引用render errors django 文档的一部分也可能有帮助。

如果您只想更改 form.errors 字典中的键,您可以使用以下方法:

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)。还要检查 this关于字典键替换的问题

关于python - Django 更改表单字段错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407365/

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