我在Django 1.6.5中面临一个非常奇怪的问题。
在某些时候我需要将用户对象传递给我的forms.py,所以我定义了UploadFileForm
,如下所示:
# forms.py
class UploadFileForm(forms.Form):
def __init__(self, myuser):
print myuser
在我的观看中,我像这样实例化UploadFileForm
:
# views.py
form = UploadFileForm(myuser=request.user)
一切都按预期工作正常。现在,如果我将forms.py
更改为:
# forms.py
class UploadFileForm(forms.Form):
def __init__(self, myuser=None):
print myuser
每次我请求特定页面时,Django都会打印myuser
4次!用户名第一次正常打印但另外3个用户名只打印None
。
任何线索为什么会发生这种情况?
提前致谢。
P.S。 我知道正确的做法是先在父母身上调用super()
,但事实证明行为保持不变,因此我为了简洁而保持这种方式
更新
这是完整的views.py代码:
@login_required
def uploadTool(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
# do various irrelevant stuff
return HttpResponseRedirect('/OKPage/')
else:
form = UploadFileForm(myuser=request.user)
return render(request, 'uploadForm.html', {'form': UploadFileForm})
更新2
我觉得它有点令人毛骨悚然。我又将forms.py
更改为:
class UploadFileForm(forms.Form):
def __init__(self, *args, **kwargs):
for i, j in kwargs.iteritems():
print i, j
self.myuser = kwargs.pop('myuser')
print self.myuser
# console output
myuser jsmith
jsmith
然而,Django不会渲染模板,而是会抱怨它无法找到myuser
!
最后,如果我将self.myuser = kwargs.pop('myuser')
更改为self.myuser = kwargs.pop('myuser', None)
,Django现在将打印:
# console output
myuser jsmith
jsmith
None
None
None
并且将再次无法呈现模板。
答案 0 :(得分:0)
即使Jamie Cockburn没有直截了当地回答,他发现了我的一个代码错误,结果发现它对所有这些奇怪的行为都是负责任的。
在我的views.py
我有这个:
return render(request, 'uploadForm.html', {'form': UploadFileForm})
应该是什么时候:
return render(request, 'uploadForm.html', {'form': form})