这是我的场景:我在页面上有多个选择框,其中用户从 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
,但我希望和 有两个不同的 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'),
有没有办法用一种形式和一种视图来做到这一点?或者我是否需要为thing
and编写不同的表单stuff
,然后检查哪个表单在我的视图中传递并相应地重定向到适当的 url?你会怎么做?谢谢你的想法!