【问题标题】:django unboundlocalerror formsetdjango unboundlocalerror 表单集
【发布时间】:2011-02-17 11:31:44
【问题描述】:

我有一个表单集,允许用户为捐赠给他们的项目的用户提供多种奖励。

如果我登陆页面并且没有输入任何信息,提交我会得到一个 UnboundLocalError,这看起来很奇怪,因为我正在检查表单是否有效以及表单集。

Exception Type: UnboundLocalError at /projects/new/
Exception Value: local variable 'reward' referenced before assignment

Views.py

def new(request, template_name='projects/new.html'):

if request.POST:

    form = UserSubmittedProjectForm(request.POST, request.FILES)
    if form.is_valid():
        project = form.save(commit=False)
        reward_formset = RewardFormSet(request.POST, instance=project)
        if reward_formset.is_valid():
            slug = request.POST.get("project_name")
            project.slug = slugify(slug)
            project.status = 'PR'
            project.owner = request.user
            project.money_raised = 0
            project.date_published = datetime.now()
            project.save()
            form.save_m2m()
            reward_formset.save()
            signals.post_save.connect(notify_admins, sender=Project)
            return HttpResponseRedirect('/projects/')
else:
    form = UserSubmittedProjectForm()
    reward = RewardFormSet(instance=Project())

context = { 'form':form,'reward':reward, }

return render_to_response(template_name, context,
    context_instance=RequestContext(request))

【问题讨论】:

    标签: django django-views django-errors


    【解决方案1】:

    您在 POST 块中调用了不同的表单集 - reward_formset,但在非 POST 块中只是 reward。如果它是一个 POST 并且无效,它将一直到底部,代码需要一个尚未定义的变量 reward

    变量命名保持一致。

    【讨论】:

      【解决方案2】:

      'reward' 仅在 else 块中可见,移动变量以实现适当的作用域,例如:

      def new(request, template_name='projects/new.html'):
      
          form = UserSubmittedProjectForm()
          reward = RewardFormSet(instance=Project())
      
          if request.POST:
             form = UserSubmittedProjectForm(request.POST, request.FILES)
             ...    
      
          context = { 'form':form,'reward':reward, }
      
          return render_to_response(template_name, context,
              context_instance=RequestContext(request))
      

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 2021-06-15
        • 2011-12-11
        • 1970-01-01
        • 2020-11-17
        • 2018-02-08
        相关资源
        最近更新 更多