使用表单字段生成查询字符串

2024-05-08 19:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表单,它将一些参数发送到一个视图,在该视图中,我将这些参数用作查询中的过滤器。搜索参数不是必需的,当表单的某个字段留空时,我不会将其用作筛选条件。你知道吗

我试图为查询创建字符串,但得到一个错误:“太多值无法解包”

你知道会发生什么吗?此外,任何一个更简单的方法来做它的想法也将不胜感激!你知道吗

我的观点是这样的(在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)

Tags: in视图表单参数indexrequestminquery
1条回答
网友
1楼 · 发布于 2024-05-08 19:26:23

不要通过构造自己的查询来重新设计轮子,而要使用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)

^{}有助于获取POST参数或None的值(如果在字典中找不到参数)。
^{}结尾有助于添加>=条件。你知道吗

在使用它们之前,您可能还需要检查marcamodelotamano_min

latest_products = products.objects.all()
if marca is not None:
    latest_products = latest_products.filter(brand=marca)

等等。你知道吗

相关问题 更多 >