我正在用 Django 开发一个应用程序。
在这个应用程序中有一个文件表格。
在与 base.html 关联的视图函数中,我实现了一个消息系统,如果用户没有正确填写表单并尝试提交它,它会发布消息。
messages.error(request, ('ERROR: Compile the form properly!'))
在我的models.py 中,我有一个干净的函数,它通过引发验证错误并在控制台中打印一条消息来防止表单验证:
def clean(self):
if not (self.file):
raise ValidationError("No file selected.")
if not self.Glossary_file.lower().endswith('.xls', '.xlsx', '.xlsm' '.csv', '.xml', '.xlt'):
raise ValidationError("The selected file is not a spreadsheet.")
但是,这两条消息被views.py 中的字符串覆盖。
假设我像这样重写我的干净方法:
def clean(self):
if not (self.file):
error_message="No file selected."
raise ValidationError("who cares, it gets overwritten by view message")
if not self.Glossary_file.lower().endswith('.xls', '.xlsx', '.xlsm' '.csv', '.xml', '.xlt'):
error_message="The selected file is not a spreadsheet."
raise ValidationError("who cares, it gets overwritten by view message")
我的views.py需要这样的东西,替换另一行:
messages.error(request, (error_message))
但我不知道如何error_message
从models.py 传递到views.py。
ValidationError 阻止我return
在我的 clean 函数中添加一个,我可以用它来 return error_message
。
这是我与表单页面对应的视图功能:
def add_file(request):
if request.method=='POST':
form = file_form(request.POST, request.FILES)
if form.is_valid():
form.save()
insert_attempt_output="correct"
messages.success(request, ("ok"))
return redirect('add_file_template')
else:
insert_attempt_output="error"
messages.error(request, ('ERROR: Compile the form properly!'))
return render(request, 'add_file_template.html', {'insert_attempt_output':insert_attempt_output})
else:
return render(request, 'add_file_template.html', {})