Python Django-CreateView-如果模型表单无效,则发送自定义错误消息
我使用了一些基于类的视图 如果表单POST有效,则发送成功消息 如果表单POST无效,我还想发送一条自定义错误消息 很明显,如何配置success_消息,只需使用successessagexin和 添加一个成功消息变量。我试过同样的方法一个月 错误消息,但没有显示我的任何尝试 表单页面上的错误闪烁消息-我的尝试在下面的else:块中被注释掉 向CBV发送错误消息似乎是一种非常常见的情况,但我在Django文档或任何其他在线位置都找不到任何示例 有人知道我怎么做吗 我只是想说清楚,我不是在说添加ValidationErrors 为特定字段创建的。我有字段的验证错误,工作正常。这 指将出现在屏幕顶部的自定义flash消息 页面 base.htmlPython Django-CreateView-如果模型表单无效,则发送自定义错误消息,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我使用了一些基于类的视图 如果表单POST有效,则发送成功消息 如果表单POST无效,我还想发送一条自定义错误消息 很明显,如何配置success_消息,只需使用successessagexin和 添加一个成功消息变量。我试过同样的方法一个月 错误消息,但没有显示我的任何尝试 表单页面上的错误闪烁消息-我的尝试在下面的else:块中被注释掉 向CBV发送错误消息似乎是一种非常常见的情况,但我在Django文档或任何其他在线位置都找不到任何示例 有人知道我怎么做吗 我只是想说清楚,我不是在说添加V
{% 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">×</span></button></div>
{% endfor %}
{% endif %}
{% block content %}
{% endblock content %}
尝试在表单_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)
尝试在表单_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)
您可以覆盖以添加错误消息:
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)
def form_invalid(self, form):
messages.error(self.request, self.error_message)
return super().form_invalid(form)
您可以覆盖以添加错误消息:
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)
def form_invalid(self, form):
messages.error(self.request, self.error_message)
return super().form_invalid(form)
感谢您的回复-这似乎是一个显而易见的解决方案。不幸的是,我无法让它工作-当我把你的代码放入时,我得到一个AttributeError异常值:“DocCreateView”对象没有属性“error_message”@stevec:在你的问题中,你在error_message而不是error_Meesagah中输入了一个错误!当我错过这样的东西时,我知道我盯着屏幕看太久了!谢谢,这解决了问题。该睡觉了。谢谢你的回复——这似乎是一个显而易见的解决办法。不幸的是,我无法让它工作-当我把你的代码放入时,我得到一个AttributeError异常值:“DocCreateView”对象没有属性“error_message”@stevec:在你的问题中,你在error_message而不是error_Meesagah中输入了一个错误!当我错过这样的东西时,我知道我盯着屏幕看太久了!谢谢,这解决了问题。该睡觉了。