django - 如何使用同一类将一个变量从一个方法传递给另一个方法?
问题描述
如何从第一种方法(contect_data)获取第二种方法(形式)中的变量 qid。
现在我收到错误:NameError: name 'tmp' is not defined
class AnswerView(FormView):
template_name = 'answer.html'
form_class = AnsForm
success_url='success'
def get_context_data(self, *args, **kwargs):
context = super(AnswerView,self).get_context_data(**kwargs)
qid = self.kwargs['qid']
print(qid)
self.qid=qid
q_obj = Quest.objects.get(id=qid)
context['question'] = q_obj
return context
def form_valid(self, form):
answ1 = form.cleaned_data['txta']
tmp = self.get_context_data().qid
obj4=Ans.objects.create(answer=answ1,status=0,questid=tmp)
obj4.save()
return super().form_valid(form)
解决方案
其实你也可以用self.kwargs['qid']
in form_valid
。所以你可以简单地这样做:
class AnswerView(FormView):
template_name = 'answer.html'
form_class = AnsForm
success_url='success'
def get_context_data(self, *args, **kwargs):
context = super(AnswerView,self).get_context_data(**kwargs)
qid = self.kwargs['qid']
q_obj = Quest.objects.get(id=qid)
context['question'] = q_obj
return context
def form_valid(self, form):
answ1 = form.cleaned_data['txta']
tmp = self.kwargs['qid']
obj4=Ans.objects.create(answer=answ1,status=0,questid=tmp)
obj4.save()
return super().form_valid(form)