我正在制作一个购买汽车的网站,其中有一个发送的表格(过滤器)POST。
该模型Ads包含具有以下字段的对象:brand_id, model_id, generation_id.
问题:如果在网站的过滤器中没有选择“品牌”位置,那么将request.POST['brand']返回以下内容:(''
空字符串,因为<option value="">,所以输出可以更改)。然后就会出现这个错误:ValueError: Field 'id' expected a number but got ''.
但重点不是这个错误,我需要的是如果没有选择任何内容,那么Django 返回所有对象,也就是忽略过滤器brand_id。
注意: 不仅可以取消选择“品牌”,还可以取消选择任何字段。有必要通过选择“品牌”而不是选择“型号”来使过滤器忽略 model_id 并仅按“品牌”进行搜索。等等。还有 10 个字段(例如“品牌”和“型号”)可供搜索。如果针对每个案例都写,那就太多了。
以下是代码views.py:
context = {
'Body': Brand.objects.all(),
'EngineType': EngineType.objects.all(),
'BoostType': BoostType.objects.all(),
}
context['Ads'] = Ads.objects.filter(brand_id=request.POST['brand'],
model_id=request.POST['model'],
generation_id=request.POST['generation'],
)
return render(request, 'ADS/main.html', context)
请帮忙。如果您对如何以完全不同(更好)的方式做到这一点有任何想法,我很乐意听取。
理论上理想的解决方案:Ads.objects.filter(brand_id=request.POST['brand'])可以传递给而不是 的参数request.POST['brand'],比如all(),但all()不能。然后就可以使用里面的函数(测试)if检查每个参数brand_id=test(request.POST['brand'])。如果此参数request.POST['brand']= ''(空字符串),则返回这个非常神奇的参数,它将取消此字段的过滤(在此示例中brand_id:)。