Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅当值在Django中定义时才进行筛选_Python_Django_Post - Fatal编程技术网

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)
它叫。有两种方法可以做到这一点:

  • 创建django表单并使用myform.is\u valid()。你可以读到它

  • 使用几个“if”语句(在服务器端或在发送ajax调用之前使用javascript)自己验证它

  • 它叫。有两种方法可以做到这一点:

  • 创建django表单并使用myform.is\u valid()。你可以读到它

  • 使用几个“if”语句(在服务器端或在发送ajax调用之前使用javascript)自己验证它


  • 您可以事先构建过滤器:

    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)传递数据的。我明白我也必须更改表单,不是吗?我明白我也必须更改表单,不是吗?工作正常,顺便说一下,我将在将来调查所有表单验证问题。谢谢它工作得很好,顺便说一句,我将在将来调查所有表单验证问题。谢谢