【发布时间】:2021-04-15 04:14:03
【问题描述】:
我在 Django 中创建了一个表单,它有一个 max_length=255 的字符域,如下所示:
task = models.CharField(max_length= 255)
现在我想让用户知道他输入了多少个字符,如果他超过了 255 个字符的限制,所以我做了以下操作
if form.is_valid():
#some code
else:
messages.info(request,(form.errors.get("task").as_text()))
现在假设如果我在表单字段中输入 445 个字符并提交,那么 默认情况下我会收到以下错误消息:
* Ensure this value has at most 255 characters (it has 445).
但是,我想将此消息更改为:
Error: maximum length limit is 255 characters (it has 445).
所以我尝试了以下方法:
class ListForm(ModelForm):
class Meta:
model = ListModel
fields = ["task", "status"]
error_messages = {
'task': {
'max_length': ("Error: maximum length limit is 255 characters"),
},
}
现在消息已更改为:
* Error: maximum length limit is 255 characters.
我的问题:
- 我不希望在消息前面显示
* - 我无法捕获用户输入的字符数,这些字符显示在默认消息中,即
(it has 445)
我可以做些什么来打印
Error: maximum length limit is 255 characters (it has 445). 而不是
* Error: maximum length limit is 255 characters.?
【问题讨论】:
-
您能给我们看一下表格的
HTML吗?我很确定星号*是 HTML<li>。 -
我已经使用Django form class 来生成表单,所以我没有专门为表单定义任何HTML。
-
当然,但问题是您如何访问模板中的
messages.info。对我来说,messages.info不包含星号,如果我在没有任何 HTML 标记的情况下访问它。标准的django.forms.Form类不会为messages.info呈现任何HTML,您必须自己访问它。 -
好的,现在我明白了,要访问 HTML 中的消息,我正在执行以下操作:
{% if messages %}{% for message in messages %} <p>{{ message }}</p> {% endfor %}{% endif %},所以我认为我的 HTML 中没有使用任何- 类跨度>
-
奇怪。也许您可以尝试输入
messages.info(request, "some test string")并告诉我们是否仍然存在相同的问题。您也可以尝试print(form.errors.get("task").as_text())看看那里是否有星号或者是否是 HTML 问题。括号也是多余的
标签: python django django-models django-forms django-validation