Django Form继承问题

时间:2010-03-03 17:10:32

标签: python django django-forms

为什么我不能这样做?

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

3 个答案:

答案 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)