Django-CreateView-如果模型表单无效,则发送自定义错误消息



我有一些基于类的视图,其中我使用Django消息框架如果形式为POSTis_valid,则发送成功消息。

如果表单POST无效,我还想发送一个自定义的error_message

如何配置success_message非常明显,只需使用SuccessMessageMixin和添加一个";成功消息";变量我尝试过同样的方法error_message,但我的任何一次尝试都没有显示表单页面上的错误闪烁消息-我的尝试在下面的else:块中被注释掉。

向CBV发送错误消息似乎是一种非常常见的情况,但我在Django文档或其他任何在线地方都找不到任何例子。

有人知道我该怎么做吗?

我不是在说添加ValidationErrors为特定字段创建的。我有工作良好的字段的ValidationErrors。这指的是将出现在页

#views.py
class DocCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): 
model = Doc
form_class = DocForm
template_name = "doc/doc_form.html"
context_object_name = 'doc'
success_message = 'Doc successfully created!'
error_meesage = "Error saving the Doc, check fields below."

def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)
def form_submit(self, request):
if request.method == 'POST':
form = DocForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('doc-detail'))
else:
# messages.error(self.request, error_message)
# messages.add_message(self.request, messages.ERROR, error_message)
# form = DocForm()

return redirect('doc-detail', pk=post.pk)

#base.html

{% if messages %}
{% for message in messages %}
<div class="alert {% if message.tags %}alert-{{ message.tags }}{% endif %}">
{{ message }}<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span></button></div>
{% endfor %}
{% endif %}
{% block content %}
{% endblock content %}

您可以覆盖form_invalid(…)方法[Django-doc]以添加错误消息:

from django.contrib import messages
class DocCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): 
model = Doc
form_class = DocForm
template_name = "doc/doc_form.html"
context_object_name = 'doc'
success_message = 'Doc successfully created!'
error_message = 'Error saving the Doc, check fields below.'

def get_success_url(self):
return reverse('doc-detail', kwargs={'pk': self.object.pk})
def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)
defform_invalid(self, form):
messages.error(self.request, self.error_message)
return super().form_invalid(form)

尝试在form_submit中添加消息,类似于

#views.py
class DocCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): 
model = Doc
form_class = DocForm
template_name = "doc/doc_form.html"
context_object_name = 'doc'
success_message = 'Doc successfully created!'
error_meesage = "Error saving the Doc, check fields below."

def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)
def form_submit(self, request):
if request.method == 'POST':
form = DocForm(request.POST)
if form.is_valid():
form.save()
else:
messages.error(self.request, self.error_message)
return HttpResponseRedirect(reverse('doc-detail'))

return redirect('doc-detail', pk=post.pk)

最新更新