2013-06-19 55 views
1

我有一个动态表单,并且由于参数“waysNumber”而导致post方法出错。问题是在post method中deline“formulari = WayForm(request.POST,request.FILES)”。它从WayForm执行函数init(),现在没有名为waysNumber的参数。这是传递这个参数的正确方法?这里是我的代码:django表单传递参数

forms.py:

class WayForm(forms.Form): 

    def __init__(self, *args, **kwargs):   
     waysNumber = kwargs.pop("waysNumber") 
     super(WayForm, self).__init__(*args, **kwargs) 
     CHOICES = (('1','Pista',),('2','Corriol',))    
     for i in range(waysNumber): 
      self.fields["Descripcio"+str(i)]= forms.CharField(widget=forms.Textarea(),label="Descripcio"+str(i)) 
      self.fields["Tipus"+str(i)] = forms.ChoiceField(widget=forms.RadioSelect, choices=CHOICES, label="Tipus de camí"+str(i)) 

views.py:

def acoplar_track(request, track_id):  

    if request.method=='GET': 
     track = get_object_or_404(Track, id=track_id) # obte el track i la zona corresponent al track 

     newWays_l = x.getTrackWays() # obte les ids dels nous camins que s'afegiran 

     formulari = WayForm(waysNumber = len(newWays_l))      
     return render(request,'principal/wayForm.html') 

    else: 
     formulari = WayForm(request.POST, request.FILES) 
     if formulari.is_valid(): 
      ...      
      return render_to_response('principal/inici.html', context_instance=RequestContext(request)) 

感谢您的帮助!

回答

0

问题是你没有坚持跨请求的价值。一旦发布帖子,您的参数就不存在于WayForm实例中。为了解决这个问题,你可以这样初始化你的表格:

def acoplar_track(request, track_id): 
    newWays_l = x.getTrackWays() 
    formulari = WayForm(request.POST or None, request.FILES or None, 
     waysNumber = len(newWays_l)) 

    if request.method=='GET': 
     track = get_object_or_404(Track, id=track_id) 
     return render(request,'principal/wayForm.html') 
    else: 
     if formulari.is_valid():  
      return render_to_response('principal/inici.html', 
       context_instance=RequestContext(request))