Python 仅当值在Django中定义时才进行筛选
我有以下看法:Python 仅当值在Django中定义时才进行筛选,python,django,post,Python,Django,Post,我有以下看法: def process(request): if request.method == 'POST': data = request.POST results = Specs.objects.filter(screenGroup = data['screen_user'], storage = data['storage_user'], mSystem = data['system_user'] ) context = {'r
def process(request):
if request.method == 'POST':
data = request.POST
results = Specs.objects.filter(screenGroup = data['screen_user'], storage = data['storage_user'], mSystem = data['system_user'] )
context = {'results' : results}
return render(request, 'process.html', context)
当用户输入三个值时,它会正确过滤,但当它只输入一个或两个(或什么都不输入)时,它会过滤传递值None。如果没有设置过滤器,有没有办法忽略它
谢谢
编辑:
以下代码正在运行,但显然这是一种非常低效的方法:
def process(request):
if request.method == 'POST':
data = request.POST
if(data['screen_user'] != None):
results = Specs.objects.filter(screenGroup = data['screen_user'])
elif (data['storage_user'] != None):
results = Specs.objects.filter(storage = data['storage_user'])
else:
results = Specs.objects.all()
#plus all the other options...
context = {'results' : results}
return render(request, 'process.html', context)
它叫。有两种方法可以做到这一点:
您可以事先构建过滤器:
def process(request):
if request.method == 'POST':
data = request.POST
spec_filter = {}
for attribute in ['screenGroup', 'storage', 'mSystem']:
if attribute in data and data[attribute]:
spec_filter[attribute] = data[attribute]
results = Specs.objects.filter(**spec_filter)
context = {'results' : results}
return render(request, 'process.html', context)
NB:要使用此逐字记录,您必须更改request.POST中传递的变量的名称,以匹配
规范
模型中的变量。我这样做只是为了说明,但是您可以很容易地对变量名使用相同的原则。在这种情况下,您必须更加详细。您可以事先构建过滤器:
def process(request):
if request.method == 'POST':
data = request.POST
spec_filter = {}
for attribute in ['screenGroup', 'storage', 'mSystem']:
if attribute in data and data[attribute]:
spec_filter[attribute] = data[attribute]
results = Specs.objects.filter(**spec_filter)
context = {'results' : results}
return render(request, 'process.html', context)
NB:要使用此逐字记录,您必须更改request.POST中传递的变量的名称,以匹配
规范
模型中的变量。我这样做只是为了说明,但是您可以很容易地对变量名使用相同的原则。在这种情况下,您必须更详细一些。您不是在做表单提交吗?不是,我是通过AJAX(jQuery)传递数据的。您不是在做表单提交吗?不是,我是通过AJAX(jQuery)传递数据的。我明白我也必须更改表单,不是吗?我明白我也必须更改表单,不是吗?工作正常,顺便说一下,我将在将来调查所有表单验证问题。谢谢它工作得很好,顺便说一句,我将在将来调查所有表单验证问题。谢谢