2011-02-17 77 views
0

我有一個formset,允許用戶爲用戶捐贈多個獎勵給他們的項目。django unboundlocalerror formset

如果我登陸頁面並輸入任何信息,提交我得到一個UnboundLocalError,這看起來很奇怪,因爲我正在檢查表單是否有效以及formset。

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)) 

回答

0

'獎勵' 只是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)) 
1

你叫formset不同的東西 - POST塊中的reward_formset,但非POST塊中只有reward。如果它是一個POST並且是無效的,它將落在底部,代碼期望變量reward尚未定義。

要保持變量命名一致。

+0

不錯,謝謝你的提示。 – ApPeL 2011-02-18 07:10:17