1

動的フォームがあり、パラメーター「waysNumber」が原因で post メソッドでエラーが発生します。問題は、post メソッドの「formulari = WayForm(request.POST, request.FILES)」という行にあります。WayForm から関数 init() を実行しますが、waysNumber という名前のパラメーターはありません。このパラメータを渡す正しい方法はどれですか? これが私のコードです:

フォーム.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))

ビュー.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))

ご協力いただきありがとうございます!

4

1 に答える 1

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))
于 2013-06-20T01:33:53.323 に答える