我有一个表单,它将一些参数发送到视图,我将此参数用作查询中的过滤器。搜索参数不是强制性的,当表单的字段留空时,我不会将其用作过滤条件。
我试图为查询创建字符串,但收到错误:“解压的值太多了”
有关可能发生的事情的任何想法?此外,任何更简单的方法的想法也将受到赞赏!
我的观点是这样的(在dict busca中,键是表单名称和值数据库字段为django模型)
def index(request):
a={}
busca={'marca':'brand = ', 'modelo':'model = ', 'tamano_min':'size >= '}
for i in request.POST:
if i in ['marca', 'modelo', 'tamano_min']:
valor=request.POST.get(i)
a[i]=str.join(busca[i], valor)
query=list(a.values)
query=' and '.join(query)
latest_products = products.objects.filter(query, )
template = loader.get_template('search/index.html')
context = {'latest_products': latest_products}
return render(request, 'search/index.html', context)
答案 0 :(得分:2)
不要通过构建自己的查询来重新发明轮子并使用Django ORM的强大功能。
例如:
marca = request.POST.get('marca')
modelo = request.POST.get('modelo')
tamano_min = request.POST.get('tamano_min')
latest_products = products.objects.filter(brand=marca, model=modelo, size__gte=tamano_min)
如果在字典中找不到参数, get()
有助于获取POST
参数或None
的值。
__gte
结尾有助于添加>=
条件。
您可能还想在使用前检查marca
,modelo
和tamano_min
:
latest_products = products.objects.all()
if marca is not None:
latest_products = latest_products.filter(brand=marca)
等等。