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)
更具体地说,为什么forms.CharField无法获取我在构造时设置的变量tester呢?
我觉得我对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
你可以这样做:
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)
1
你可以这样做 这儿有个方法
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
你遇到的问题是因为你的 CharField
是在类创建的时候就生成的,并且被 UserProfileConfig.username
指向,而不是在实例创建的时候才生成。也就是说,self.tester
这个东西在你创建实例的时候,调用 __init__
之前是不存在的。