【发布时间】:2015-07-30 16:05:00
【问题描述】:
我很难理解如何将两个 django 表单中的数据从 同一视图 提交到两个单独的数据库表中。我只想要一个提交按钮。虽然this 问题让我更接近解决方案,但我遇到了错误并且数据没有写入数据库。我认为这段代码实际上检查了这两个表单,而不是一次性提交两个表单。有什么想法吗?
这是我尝试过的:
对于一个表格 --> 一个表格。这行得通,所以这是一个开始。
# views.py
def BookFormView(request):
if request.method == 'POST':
form = BookForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect("/books/")
else:
form = BookForm()
return render(request, 'books/createbooks.html',
{'form' : form})
但是,当我从 forms.py 添加此表单以获取后续views.py 时,我得到local variable 'book_form' referenced before assignment。这通常是一个容易解决的全局与局部变量问题,但我不知道在这种情况下它意味着什么。
def BookFormView(request):
if request.method == 'POST':
if 'book' in request.POST:
book_form = BookForm(request.POST, prefix='book')
if book_form.is_valid():
book_form.save()
return HttpResponseRedirect("/books/")
bookdetailsform = BookDetailsForm(prefix='bookdetails')
elif 'bookdetails' in request.POST:
bookdetailsform = BookDetailsForm(request.POST, prefix='bookdetails')
if bookdetailsform.is_valid():
bookdetailsform.save()
return HttpResponseRedirect("/books/")
book_form = BookForm(prefix='book')
else:
book_form = BookForm(prefix='book')
bookdetailsform = BookDetailsForm(prefix='bookdetails')
return render(request, 'books/createbook.html',
{'book_form' : book_form,
'bookdetailsform': bookdetailsform})
【问题讨论】:
-
既然你只需要一个逻辑路径,即保存两个表单,为什么在发帖时有两个单独的 if(
book和bookdetail)? -
有趣。诚实的答案是我不知道。我试图使用其他 SO 答案来拼凑一些可行的东西。我不明白的是如何只使用一个“如果”。明白我的意思了吗?