我在Django中创建了一个表单,它有一个max_length=255的charfield,如下所示:
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.
型
我的问题:
1.我不希望在消息前面显示*
1.我无法捕获用户键入的字符数,这是在默认消息中显示的。(it has 445)
个
如何打印Error: maximum length limit is 255 characters (it has 445).
而不是* Error: maximum length limit is 255 characters.
?
3条答案
按热度按时间qxsslcnc1#
我不希望在消息前面显示 *
你最后得出结论的问题(在评论中)是在
字符串
这将向客户端发送一个
<ul>
HTML元素,而不是纯文本。因此,要解决这个问题和你的其他问题,你可以做的只是检查max_length
是否可以在form.errors
中找到,并使用你自己的string
。在调用form.is_valid
之后,您的视图中应显示以下内容型
注意这里的几件事
request.POST.get
访问数据@SaeX指出可以使用
self.cleaned_data.get
获取POST请求中发送的数据。虽然这是真的,但只有当form.is_valid
返回true时才有效。你可以找到更多的here。你仍然可以使用字典,但对于值,你必须使用函数。类似以下内容
型
1mrurvl12#
你可以在表单中使用
clean_<fieldname>()
,比如:字符串
参见https://docs.djangoproject.com/en/3.1/ref/forms/validation/#cleaning-a-specific-field-attribute
whitzsjs3#
你问这个问题已经两年半了...但我已经找到了一个更好的解决方案,所以我写在这里的任何人谁访问这个问题在未来!让我解释一下
我可以通过在基于
forms.Form
的类中编辑clean
函数来实现。字符串
同样对于
forms.ModelForm
对象,我们可以这样做:型
_post_clean
是clean process完成后运行的函数,forms.Form
对象没有这样的方法我已经测试过了,它们工作得很好。
注意事项
对于
forms.ModelForm
对象,请确保在__init__
函数中创建自定义字段,在模型中使用验证器将无法工作!同样通过创建自定义字段,您在
Meta
类中为目标字段定义的所有内容都将被忽略,您必须在__init__
函数中定义它们