一个模板 - 多个模型形成错误

时间:2011-03-14 00:53:09

标签: django django-forms django-errors

views.py

def fadded(request):
    if request.method == "POST":
        fform = FtForm(request.POST)
        bform = BgForm(request.POST)
        if fform.is_valid() and bform.is_valid():
            bcontent=bform.save()
            fcontent=fform.save()

        else:
            return render_to_response("ft.html", {
            "fform": fform,
            "bform": bform,
            },context_instance=RequestContext(request))
    return HttpResponse('OK!')

ft.html

...
    {% if form.errors%}
    
    {% for error in form.errors %} {{ error|escape }} {% endfor %}
{% endif %} ...

有两种模型形式:fform和bform。它们代表两种不同的模型,但在同一模板中使用。我试图挽救两者并从两者中获得形式/野蛮人。但是如果已经存在fform.errors,那么django并没有显示bform.errors(并且可能甚至没有创建bform)。有什么不同方式的建议吗?

2 个答案:

答案 0 :(得分:0)

  

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

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

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

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

答案 1 :(得分:0)

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

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

从django.contrib导入消息

从django.views.generic导入TemplateView

从.forms导入AddPostForm,AddCommentForm 来自.models import评论

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/

希望这可以帮助您指导正确的方向。期待听到它的进展。