首页 > 解决方案 > 如何使用同一类将一个变量从一个方法传递给另一个方法?

问题描述

如何从第一种方法(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)

标签: django

解决方案


其实你也可以用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)

推荐阅读