1

問題

アプローチを変えて・・・

My url : my_code を渡す

(r'^test_form_2/(?P<my_code>\d+)/$', TestForm_2),

My views : my_code を取得して、dic_list の正しい選択リストを選択します

def TestForm_2(request,my_code):

    dic_list = {'1':(('1','A'),('2','B'),('3','C')),
                '2':(('1','D'),('2','E'),('3','F')),
                '3':(('1','G'),('2','H'),('3','I'))
                }

    if request.method =="POST" :
        form = TestForm2(request.POST)

        if form.is_valid():

            return HttpResponse ('OK')

    else :

        my_choices_list = dic_list[my_code]
        form = TestForm2(my_choice=my_choices_list)

    return render_to_response ('zip_finder/page_form.html')

とフォーム:

class TestForm2(forms.Form):

    my_select = forms.ChoiceField(choices='',label='Choisissez dans la liste')

    def __init__(self, my_choice=None, **kwargs):
        super(TestForm2, self).__init__(**kwargs)
        if my_choice:

            self.fields['my_select'] = forms.ChoiceField(choices=my_choice,label='Choisissez dans la liste')

ここに画像の説明を入力

[送信] をクリックしてから:

Caught ValueError while rendering: too many values to unpack

HTML を確認しましたが、選択したオプションが表示されません。

 <select id="id_my_select" class="select" name="my_select">
<option value="1">D</option>
<option value="2">E</option>
<option value="3">F</option>
</select>

解決策 : ModelChoiceField を使用する

My url : my_code を渡す

  (r'^test_form_2/(?P<my_code>\d+)/$', TestForm_2),

マイ ビュー : my_code を取得して、クエリセット オブジェクトの正しい選択リストを選択します

 def TestForm_2(request,my_code):



        if request.method =="POST" :
            form = TestForm2(request.POST)

            form.fields['ville_source'].queryset = Villes.objects.filter(code_postal=my_code)
            if form.is_valid():

                return HttpResponse ('OK')

        else :


            form = TestForm2(my_code=my_code)

        return render_to_response ('zip_finder/page_form.html')

私のフォーム:

class TestForm4(forms.Form):


    ville_source = ModelChoiceField(queryset=Villes.objects.all(),required=True,label='Choisissez votre ville source')


    def __init__(self, *args, **kwargs):
        code_postal = kwargs.pop('my_code', None)
        super(TestForm4, self).__init__(*args, **kwargs)

        if code_postal:


            self.fields['ville_source'].queryset = Villes.objects.filter(code_postal=code_postal)
4

1 に答える 1

1
  1. クエリセット lst_ville は空です。次のユニコード値を使用して、次のようにフィルタリングする必要がありますcode_postal

    .filter(code_postal='<django.forms.fields.CharField object at 0x26bf550>').
    
  2. CharField の代わりにModelChoiceField を使用します。

    # make sure that lst_ville is not an empty queryset
    ville_source = forms.ModelChoiceField(queryset=lst_ville,label='Choisissez votre ville source')
    
  3. フォームの別のフィールドの値に基づくフィールド フィルタリングの場合、少し複雑になります。最も簡単な解決策は、 django-selectables または django-autocomplete-light を使用することです

于 2012-08-29T12:50:39.810 に答える