对于我的网站,我正在尝试设计一个搜索栏,用于过滤某个类的多个属性,例如姓名和电话。 但是,我不知道如何从python中的一个页面获取多个值。我已经做了很多尝试,但都搞砸了。 我发布了最新的(也没用)。我真的可以使用一些帮助。
def search(request):
errors = []
if 'q1' in request.GET:
q1 = request.GET['q1']
if 'q2' in request.GET:
q2 = request.GET['q2']
if not (q1 or q2):
errors.append('Enter a search term.')
elif ((len(q1) > 20) or (len(q2) > 20)):
errors.append('Please enter at most 20 characters.')
elif q1 and (not q2):
hotels = Hotel.objects.filter(name__icontains=q1)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': q1})
elif ((not q1) and q2):
hotels = Hotel.objects.filter(street__icontains=q2)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': q2})
else:
names = Hotel.objects.filter(name__icontains=q1)
streets = Hotel.objects.filter(street__icontains=q2)
hotels = (names and streets)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': (q1 or q2)})
return render(request, 'company/search_form.html',
{'errors': errors})
我还发布了部分html代码,我得到了输入。
<table align="center">
<tr>
<td>name:</td>
<td><input type="text" name="q1"></td>
</tr>
<tr>
<td>telephone:</td>
<td><input type="text" name="q2"></td>
</tr>
</table>
<form action="/company/search/" method="get">
<input type="submit" value="Search">
</form>
答案 0 :(得分:0)
我对您的代码进行了一些更改。首先,我使用get()
来获取参数,因此您不需要在request.GET中使用if。接下来我使用了chaining QuerySet filters。最后,我让它将q1和q2都返回给模板。只有在你可以输入查询时才返回查询是没有意义的。
def search(request):
errors = []
q1 = request.GET.get('q1')
q2 = request.GET.get('q2')
if not (q1 or q2):
errors.append('Enter a search term.')
elif ((len(q1) > 20) or (len(q2) > 20)):
errors.append('Please enter at most 20 characters.')
else:
hotels = Hotel.objects.all()
if q1:
hotels = hotels.filter(name__icontains=q1)
if q2:
hotels = hotels.filter(street__icontains=q2)
return render(request, 'company/search_results.html', {'hotels': hotels, 'q1': q1, 'q2': q2, 'errors': errors})
答案 1 :(得分:0)
如果有人关心我在我的代码上发现以下错误:
输入应该是内部指定&#34;操作&#34;
的表单加上我修复了我的代码,所以我也发布了它:
def search(request):
errors = []
q1 = None
q2 = None
if 'name' in request.GET:
q1 = request.GET['name']
if 'telephone' in request.GET:
q2 = request.GET['telephone']
if not (q1 or q2):
errors.append('Enter a search term.')
elif q1 and (not q2):
hotels = Hotel.objects.filter(name__icontains=q1)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': q1})
elif ((not q1) and q2):
hotels = Hotel.objects.filter(number__icontains=q2)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': q2})
else:
names = Hotel.objects.filter(name__icontains=q1)
streets = Hotel.objects.filter(number__icontains=q2)
hotels = (names and streets)
return render(request, 'company/search_results.html', {'hotels': hotels, 'query': (q1 or q2)})
return render(request, 'company/search_form.html',
{'errors': errors})