2010-03-03 86 views
1

为什么我不能这样做?Django窗体继承问题

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__或其他方式来处理这个问题?

回答

2

因为你CharField被创建瞧你是多么不工作,并指出,通过UserProfileConfig.username创建类时,没有实例被创建的时候。 self.tester直到您在实例创建时调用__init__才存在。

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' 
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)