<p>首先,从表单中删除<code>FKtoClient</code>。您需要在视图中设置用户,以便对请求对象执行“是”。不能在窗体上设置自动设置当前用户的属性。在</p>
<p>实例化表单时,可以传递一个<code>tld</code>实例,该实例已经有用户集。在</p>
<pre><code>def AccountHome(request):
# I recommend using the login required decorator instead but this is ok
if request.user.is_anonymous():
return HttpResponseRedirect('/Login/')
# create a tld instance for the form, with the user set
tld = Tld(FKtoClient=request.user)
form = SubmitDomain(data=request.POST or None, instance=tld) # A form bound to the POST data, using the tld instance
if request.method == 'POST': # If the form has been submitted...
if form.is_valid(): # If form input passes initial validation...
domainNm = form.cleaned_data['domainNm']
form.save() #save cleaned data to the db from dictionary
# don't use a try..except block here, it shouldn't raise an exception
return HttpResponseRedirect('/Processscan/?domainNm=%s' % domainNm)
# No need to create another form here, because you are using the request.POST or None trick
# else:
# form = SubmitDomain()
tld_set = request.user.tld_set.all()
return render(request, 'VA/account/accounthome.html', {
'tld_set':tld_set, 'form' : form
})
</code></pre>
<p>这比@dm03514的答案有一个优势,即如果需要,您可以在form方法中以<code>self.instance.user</code>的形式访问{<cd3>}。在</p>