これが私のシナリオです: ページに複数の選択ボックスがあり、ユーザーが ModelChoiceField から選択肢を選択し、選択したオプションがパラメーターとして渡されたビューにリダイレクトされます。何かのようなもの:
class BrowseForm(forms.Form):
thing = forms.ModelChoiceField(queryset=Thing.objects.all(), empty_label=None, widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))
stuff = forms.ModelChoiceField(queryset=Stuff.objects.all(), empty_label=None, widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))
見る:
def browse(request):
thing_list = Thing.objects.all()
if request.method == 'POST':
form = BrowseForm(request.POST)
if form.is_valid():
thing = form.cleaned_data['thing']
stuff = form.cleaned_data['stuff']
return HttpResponseRedirect(reverse('browse_thing', kwargs={'thing':thing, 'stuff':stuff}))
else:
form = BrowseForm()
return render(request, 'browse.html', {'form':form, 'thing_list':thing_list})
これには、 の両方のフィールドを送信する必要がありますが、とBrowseForm
の 2 つの異なる URL が必要です。両方ではなく、 または のいずれかがパラメータとして渡されます。何かのようなもの:thing
stuff
thing
stuff
url(r'^browse/things/(?P<thing>[\w-]+)/$', 'views.browse', name='browse_thing'),
url(r'^browse/stuff/(?P<stuff>[\w-]+)/$', 'views.browse', name='browse_stuff'),
1 つのフォームと 1 つのビューでこれを行う方法はありますか? または、 and に対して別のフォームを作成thing
しstuff
、ビューに渡されたフォームを確認し、それに応じて適切な URL にリダイレクトする必要がありますか? これをどのように行いますか?アイデアをありがとう!