<p>您的表单是<code>Campaign</code>的<code>ModelForm</code>,因此它的<code>instance</code>必须是<code>Campaign</code>。不要将<code>request.user</code>指定为它的<code>instance</code></p>
<p>现在,您的表单没有包含保存<code>user</code>所需的<code>Campaign</code>字段,因此在保存到数据库之前,您应该在视图中自己分配该字段:</p>
<pre><code>campaign = form.save(commit=False) # this gives your the form's instance
campaign.user = request.user # this assigns the user
campaign.save() # this commits to the database
</code></pre>
<p>您还应该处理表单无效的情况。这非常简单,只需<strong>取消缩进视图函数中的最后一个<code>return</code>,以便在<code>form</code>无效的情况下也调用<code>return render(...)</code></p>
<p>最后,最好的做法是<strong>重定向到另一个视图,而不是在表单有效时返回响应。这样,当用户刷新页面时,表单不会再次提交。您的最终代码应该如下所示:</p>
<pre><code>@login_required
def raise_funds_medical_3(request):
if request.method == 'POST':
form = RaiseFundsFrom3(request.POST, request.FILES or None)
if form.is_valid():
check = form.save(commit=False)
check.user = request.user
check.save()
return redirect(<url_pattern>)
else:
form = RaiseFundsFrom3()
return render(request,'funds/raise_funds_medical_3.html',{'form':form})
</code></pre>