我正在为我们的项目使用Django。我使用Django表单创建了一个表单。在其中一种形式中,我需要检查一个变量,并根据我需要添加或删除元素的变量值。
初始化对象时,我将此变量传递给表单。
即form=MyForm(flag)
在表格类中我正在做这个
class MyInfoForm(forms.Form):
def __init__(self, *args,**kwargs):
self.flag= kwargs.pop('flag', None)
super(MyInfoForm, self).__init__(*args, **kwargs)
print self.flag
Firstname = forms.CharField(label=u' First name :', max_length=30)
在init函数中,我打印了旗帜并且工作正常。但是我怎样才能访问变量 init 我试过了
class MyInfoForm(forms.Form):
myFlag=None
def __init__(self, *args,**kwargs):
self.flag= kwargs.pop('flag', None)
myFlag=self.flag
super(MyInfoForm, self).__init__(*args, **kwargs)
print self.flag
Firstname = forms.CharField(label=u' First name :', max_length=30)
print myFlag
但它不起作用。
答案 0 :(得分:3)
class
语句是一个可执行语句:
type
)class
对象绑定到封闭(通常是模块)命名空间中的类名简而言之,你无法从class
语句体中访问实例属性,因为实例甚至类本身都不存在。
如果你想要的是基于每个实例更新/添加/删除字段,并根据传递给表单初始化程序的一些参数,正确的解决方案是首先调用父的初始化程序(以确保表单的实例字段是正确初始化)然后做你必须做的事情,即:
class MyInfoForm(forms.Form):
firstname = forms.CharField(label=u' First name :', max_length=30)
def __init__(self, *args,**kwargs):
self.flag= kwargs.pop('flag', None)
super(MyInfoForm, self).__init__(*args, **kwargs)
if self.flag:
# XXX IMPORTANT :
# you want to access self.fields['fieldname']
# NOT self.fieldname
self.fields["firstname"].label = "Yadda"
答案 1 :(得分:0)
print MyInfoForm.myFlag
怎么样?
答案 2 :(得分:0)
这取决于......如果flag的范围是类,还是类的实例?
如果范围应该是实例(这是您第一次尝试时的样子),那么您可以通过执行以下操作来访问它:
instance = MyInfoForm(flag)
...
instance.flag
另一方面,如果变量标志属于该类(意味着,MyInfoForm的每个实例只有一个标志值),那么您可以通过执行以下操作来访问它:
MyInfoForm.myFlag #using your second attempt
另外......您将变量声明为myFlag
,并尝试打印myflag
。变量名称区分大小写。