为什么我不能这样做?
from django import forms
from django.forms import widgets
class UserProfileConfig(forms.Form):
def __init__(self,*args,**kwargs):
super (UserProfileConfig,self).__init__(*args,**kwargs)
self.tester = 'asdf'
username = forms.CharField(label='Username',max_length=100,initial=self.tester)
更具体地说,为什么不能使用form.CharField抓住我在构造期间设置的变量测试器?
我觉得我错过了Python处理这类事情的方式......
编辑:
我实际上要做的是:
class UserProfileConfig(forms.Form):
def __init__(self,request,*args,**kwargs):
super (UserProfileConfig,self).__init__(*args,**kwargs)
self.tester = request.session['some_var']
username = forms.CharField(label='Username',max_length=100,initial=self.tester)
换句话说,我需要获取会话变量,然后将其设置为初始值...
有没有办法通过__init__或其他方式来处理这个问题?
答案 0 :(得分:2)
您所获得的内容不起作用,因为CharField
创建了UserProfileConfig.username
,并且在创建类时由self.tester
指向,而不是在创建实例时。在实例创建时调用__init__
之前,{{1}}不存在。
答案 1 :(得分:1)
你可以这样做this way
from django import forms
from django.forms import widgets
class UserProfileConfig(forms.Form):
username = forms.CharField(label='Username',max_length=100,initial=self.tester)
tester = 'asdf'
答案 2 :(得分:0)
你可以这样做: -
class UserProfileConfig(forms.Form):
username = forms.CharField(label='Username',max_length=100)
def view(request):
user_form = UserProfileConfig(initial={'username': request.session['username',})
这是普遍接受的方法,但您也可以这样做: -
class UserProfileConfig(forms.Form):
def __init__(self,request,*args,**kwargs):
super (UserProfileConfig,self).__init__(*args,**kwargs)
self.fields['username'] = request.session['some_var']
username = forms.CharField(label='Username',max_length=100)
def view(request):
user_form = UserProfileConfig(request=request)