2011-02-17 4 views
0

사용자가 자신의 프로젝트에 기부 할 때 여러 가지 보상을 제공 할 수있는 formset이 있습니다.django unboundlocalerror formset

페이지에 착륙하여 아무런 정보도 입력하지 않으면 양식이 유효한지, formset인지 확인하기 때문에 이상하게 보이는 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)) 

답변

0

'보상'과 같은 적절한 범위 지정, 달성하기 위해 변수를 이동 다른 블록 내에서만 볼 수 있습니다 :

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

관련 문제