【问题标题】:one template - multiple modelforms errors一个模板 - 多个模型表单错误
【发布时间】:2011-07-14 16:48:09
【问题描述】:

views.py

def 褪色(请求): 如果 request.method == "POST": fform = FtForm(request.POST) bform = BgForm(request.POST) 如果 fform.is_valid() 和 bform.is_valid(): bcontent=bform.save() fcontent=fform.save() 别的: 返回 render_to_response("ft.html", { “形式”:形式, “bform”:bform, },context_instance=RequestContext(请求)) 返回 HttpResponse('OK!')

ft.html

... {% if form.errors%}
    {% for error in form.errors %} {{ 错误|转义 }} {% endfor %}
{% 万一 %} ...

有两种模型形式:fform 和 bform。它们代表两种不同的模型,但在同一个模板中使用。我正在尝试保存两者并从两者中获取表单/字段错误。但是如果已经有 fform.errors,django 就不会显示 bform.errors(并且可能甚至不会创建 bform)。有什么不同方式的建议吗?

【问题讨论】:

    标签: django django-forms django-errors


    【解决方案1】:

    django 不显示 bform.errors(和 可能甚至不创建 bform)

    根据您的设置,两个表单都已传递数据并准备好进行验证。应该没有问题。

    在您的模板中,您必须同时显示两个表单错误(我只看到在您的模板中检查了一个表单)

    {{ fform.errors }} <!-- show errors from fform -->
    {{ bform.errors }} <!-- show errors from bform -->
    

    【讨论】:

      【解决方案2】:

      您需要使用基于类的视图!

      这是在一个 Django 视图中使用多个表单的快速示例。

      从 django.contrib 导入消息 从 django.views.generic 导入模板视图

      从 .forms 导入 AddPostForm、AddCommentForm from .models 导入评论

      class AddCommentView(TemplateView):
      
          post_form_class = AddPostForm
          comment_form_class = AddCommentForm
          template_name = 'blog/post.html'
      
          def post(self, request):
              post_data = request.POST or None
              post_form = self.post_form_class(post_data, prefix='post')
              comment_form = self.comment_form_class(post_data, prefix='comment')
      
              context = self.get_context_data(post_form=post_form,
                                              comment_form=comment_form)
      
              if post_form.is_valid():
                  self.form_save(post_form)
              if comment_form.is_valid():
                  self.form_save(comment_form)
      
              return self.render_to_response(context)     
      
          def form_save(self, form):
              obj = form.save()
              messages.success(self.request, "{} saved successfully".format(obj))
              return obj
      
          def get(self, request, *args, **kwargs):
              return self.post(request, *args, **kwargs)
      

      在这个例子中,我在网上找到(RIP tutorial),我们使用 TEMPLATE VIEW。基于类的视图是您解决此问题的方法。这是有关如何在 Django 上使用基于类的视图的最新文档的链接。阅读愉快,最重要的是耐心。 https://docs.djangoproject.com/en/2.2/topics/class-based-views/

      希望这可以帮助您朝着正确的方向前进。期待听到它的进展情况。

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        • 2011-06-29
        • 2012-08-24
        相关资源
        最近更新 更多