可以这样做:
class Login_vw(FormView):
form_class = Login_fr
success_url = '/success/'
template_name = 'login.html'
someVar_ses = self.request.session['someVar']
record_qr = MyModel.objects.filter(id=someVar_ses)
当我这样做时,我得到了这个:
NameError:名称'self'未定义
但是当我在 get_context_data 这样的方法中使用它时,它可以正常工作。
我需要的是在不同的方法中使用 record_qr var并且不要在每个方法中重复代码。
有办法吗?
已编辑添加此详细信息:
我想做的是这样的事情:
class Login_vw(FormView):
form_class = Login_fr
success_url = '/success/'
template_name = 'login.html'
def get_context_data(self, **kwargs):
context = super(Login_vw, self).get_context_data(**kwargs)
idProspect_ses = self.request.session['idProspect']
Prospect_qr = PROSPECT.objects.filter(id=idProspect_ses).values('id', 'email', 'pwd')
context['email'] = Prospect_qr[0]['email']
return context
def form_valid(self, form):
formData = form.clean()
pwd_f = formData.get("password")
if pwd_f == Prospect_qr[0]['pwd']:
print "password correct"
else:
print "wrong password"
所以,我尝试使用 self 这样做,但我得到了一个属性错误(对象没有属性Prospect_qr )
class Login_vw(FormView):
form_class = Login_fr
success_url = '/success/'
template_name = 'login.html'
def get_context_data(self, **kwargs):
context = super(Login_vw, self).get_context_data(**kwargs)
idProspect_ses = self.request.session['idProspect']
self.Prospect_qr = PROSPECT.objects.filter(id=idProspect_ses).values('id', 'email', 'pwd')
context['email'] = self.Prospect_qr[0]['email']
return context
def form_valid(self, form):
formData = form.clean()
pwd_f = formData.get("password")
if pwd_f == self.Prospect_qr[0]['pwd']:
print "password correct"
else:
print "wrong password"
答案 0 :(得分:0)
其实你做不到。为什么要在视图初始化时填充record_qr
而不是在您想要使用它的位置?例如,如果我想在提交表单后使用record_qr
,我会在form_valid
方法中执行此操作。如果您想在多个函数中使用它,为什么不在视图中创建单独的函数。例如:
class MyForm(FormView):
record_qr = None
def get_record_qr(self):
if self.record_qr:
return self.record_qr
elif hasattr(self, 'request'):
self.record_qr = MyModel.objects.filter(id=self.request.session.get(value))
return self.record_qr
return None
然后在您想要使用它的地方调用此函数,如:
def form_valid(self, form):
record_qr = self.get_record_qr()
答案 1 :(得分:-1)
与实例对象变量相比,您定义了类对象变量(静态)。 See this question and answers。另请参阅python docs
你可能想要使用实例变量,你通常在类构造函数
上定义它们class Login_vw(FormView):
def __init__(self, *args, **kwargs):
FormView.__init__(self, *args, **kwargs)
form_class = Login_fr
success_url = '/success/'
template_name = 'login.html'
# the constructor of FormView will set this (hopefully)
someVar_ses = self.request.session['someVar']
record_qr = MyModel.objects.filter(id=someVar_ses)