【发布时间】:2011-05-20 13:45:00
【问题描述】:
所以我有这个工作选择表格,应该允许用户:
1) 选择一个 filterBy 单选按钮集。这让用户可以选择他想要用来过滤列表的方法。 (这将使用“filterBy”查询字符串执行 GET
2) 允许用户通过组合框中的对象过滤列表,该对象是 #1 的结果。此表单执行 POST 并将“过滤器”设置为 filterBy 对象的 pk
这是我的代码:
selectForm = JobSelectForm()
filterByForm = FilterByForm()
filterForm = FilterForm()
if request.method == 'POST':
#this works just fine
if 'job' in request.POST:
return HttpResponseRedirect("/portal/jobs/%s/"%(request.POST['job']))
if 'filter' in request.POST:
filterForm = FilterForm(initial = {'filter': request.POST['filter']})
###### The Problem is below here
###### I cant get the 'filterBy' query string
###### because this is a POST and not a GET
###### Is there a better way to write this filtering?
if request.GET['filterby'] == 'G':
obj = Group.objects.get(pk=request.POST['filter'])
selectForm.fields['job'].queryset = Job.objects.filter(group=obj).order_by('name')
elif request.GET['filterby'] == 'H':
obj = Host.objects.get(pk=request.POST['filter'])
selectForm.fields['job'].queryset = Job.objects.filter(host=obj).order_by('name')
elif request.GET['filterby'] == 'L':
obj = Location.objects.get(pk=request.POST['filter'])
selectForm.fields['job'].queryset = Job.objects.filter(colo=obj).order_by('name')
###### All of this works fine too
elif request.method == 'GET':
if request.GET.has_key('filterby'):
if request.GET['filterby']:
filterByForm = FilterByForm(initial = {'filterby': request.GET['filterby']})
if request.GET['filterby'] == 'G':
filterForm.fields['filter'].queryset = Group.objects.all().order_by('name')
elif request.GET['filterby'] == 'H':
filterForm.fields['filter'].queryset = Host.objects.all().order_by('name')
elif request.GET['filterby'] == 'L':
filterForm.fields['filter'].queryset = Location.objects.all().order_by('name')
【问题讨论】:
-
为什么要分开 GET 和 POST?为什么不直接使用 GET 让这更简单?
标签: python django query-string filtering