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

Python Django-CreateView-如果模型表单无效,则发送自定义错误消息,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我使用了一些基于类的视图 如果表单POST有效,则发送成功消息 如果表单POST无效,我还想发送一条自定义错误消息 很明显,如何配置success_消息,只需使用successessagexin和 添加一个成功消息变量。我试过同样的方法一个月 错误消息,但没有显示我的任何尝试 表单页面上的错误闪烁消息-我的尝试在下面的else:块中被注释掉 向CBV发送错误消息似乎是一种非常常见的情况,但我在Django文档或任何其他在线位置都找不到任何示例 有人知道我怎么做吗 我只是想说清楚,我不是在说添加V

我使用了一些基于类的视图 如果表单POST有效,则发送成功消息

如果表单POST无效,我还想发送一条自定义错误消息

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

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

有人知道我怎么做吗

我只是想说清楚,我不是在说添加ValidationErrors 为特定字段创建的。我有字段的验证错误,工作正常。这 指将出现在屏幕顶部的自定义flash消息 页面

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 %}

尝试在表单_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中输入了一个错误!当我错过这样的东西时,我知道我盯着屏幕看太久了!谢谢,这解决了问题。该睡觉了。