0

视图.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)。有什么不同方式的建议吗?

4

2 回答 2

0

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

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

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

{{ fform.errors }} <!-- show errors from fform -->
{{ bform.errors }} <!-- show errors from bform -->
于 2011-03-14T01:03:28.347 回答
0

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

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

从 django.contrib 导入消息 从 django.views.generic 导入 TemplateView

从 .forms 导入 AddPostForm、AddCommentForm 从 .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 教程),我们使用 TEMPLATE VIEW。基于类的视图是您解决此问题的方法。这是有关如何在 Django 上使用基于类的视图的最新文档的链接。阅读愉快,最重要的是耐心。https://docs.djangoproject.com/en/2.2/topics/class-based-views/

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

于 2019-08-24T15:39:33.273 回答