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)。有什么不同方式的建议吗?
答案 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/
希望这可以帮助您指导正确的方向。期待听到它的进展。