Django中的max_length限制和min_length极限导致ValidationError时,如何引发不同的消



我想在Django中创建一个模型,在那里我可以为给定的字段(任务(引入字符值,min_limit=1,max_limit=255。models.py文件中的代码如下:

class ListModel(models.Model):
task = models.CharField(max_length= 255, validators = [MinLengthValidator(1), MaxLengthValidator(255)])
status = models.BooleanField(default=False)
class ListForm(ModelForm):
class Meta:
model = ListModel
fields = ["task", "status"]

现在,如果表单无效,我想根据它是否因max_length>而无效来显示不同的消息;255或者由于min_ length<1,views.py文件中的代码如下:

def index(request):
if request.method == 'POST':
form = ListForm(request.POST)
if form.is_valid():
#some code
else:
if max_length > 255:
messages.info(request, ('Maximum length limit: 255 characters!'))
else:
messages.info(request, ('No Task added!')
return redirect('index')
else:
#some code

class MaxLengthValidator(limit_value, message=None)
如果value大于limit_value,后者可能是可调用的。

在文档中提到max_length是可调用的,但我不知道如何在views.py中调用它。当max_length>255并且当min_ length<1.

最后,我有两个解决问题的解决方案

解决方案1(这就是我想要的(:

if form.is_valid():
#some code
else:
task = request.POST.get("task")
if len(task) > 255:
messages.info(request, f"Maximum length limit is 255 characters, but your task has {len(task)} characters")
elif len(task) < 1:
messages.info(request, ('No Task added!')
return redirect('index')

解决方案2:

视图中。py代码看起来像这样:

if form.is_valid():
#some code
else:
messages.info(request,(form.errors.get("item").as_text()))
return redirect('index')

并且在表单.py模型.py中,无论您的Form类在哪里,代码都将是:

class ListForm(ModelForm):
class Meta:
model = ListModel
fields = ["task", "status"]
error_messages = {
'task': {
"required": ("No task added!"),
'max_length': ("Maximum length limit: 255 characters!"),
},
}

解决方案1相对于解决方案2的优势在于,即使表单.is_valid((为False,我们也可以显示用户键入的字符数,我不确定第二种方法是否可以做到这一点,但如果也可以使用第二种方法,请在注释中告诉我:(

您必须自己浏览代码的大部分内容。访问views.py中的表单错误

if form.is_valid():
#some code
else:
print(form.errors.get("task"))

form.errors()将返回html然后你可以按照你想要的操作你的代码

在我的例子中,我使用beautifulSoup来解析html,清理它,并使用条件进行检查

最新更新