Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
如何在django中处理多个搜索输入_Django - Fatal编程技术网

如何在django中处理多个搜索输入

如何在django中处理多个搜索输入,django,Django,我有三种不同的搜索输入(按文本、按日期和复选框)是否可以处理三个帖子请求?例如,我首先想通过文本搜索找到一个课程,然后在找到它之后,我想按日期搜索结果。那样行不行 def my_view(request): if request.method == "POST": if request.POST['value_one']: # Do stuff here elif request.POST['value_two

我有三种不同的搜索输入(按文本、按日期和复选框)是否可以处理三个帖子请求?例如,我首先想通过文本搜索找到一个课程,然后在找到它之后,我想按日期搜索结果。那样行不行

def my_view(request):
    if request.method == "POST":
        if request.POST['value_one']:
            # Do stuff here

        elif request.POST['value_two']:
            # Do stuff here

        elif request.POST['value_three']:
            # Do stuff here

        else:
            # Do something else

我通常做的是使用默认值提取值,然后过滤

def my_视图(请求):
value\u one=request.GET.GET(“value\u one”,无)
value\u two=request.GET.GET(“value\u two”,无)
value\u three=request.GET.GET(“value\u three”,无)
objects=MyModel.objects.all()
如果值为1:
objects=objects.filter(field\u one=value\u one)
如果值为2:
objects=objects.filter(field\u two=value\u two)
如果值为三:
对象=对象.过滤器(字段三=值三)
#在这一点上,您有一个列表,该列表由所有
#指定的值
#
#过滤器调用只是构建最终的SQL,所以
#尚未与数据库联系,直到您
#开始迭代对象变量。
#这样你只会得到你真正想要的东西
#真的很想进入记忆。
对于对象中的obj:#现在数据库被命中
打印(f“找到主键为{obj.pk}的对象”)
还要注意我是如何使用
GET
方法而不是
POST
的。这是一种通过过滤器的更干净的方法
POST
应该用于将数据逐字地发布到服务器,就像创建新实体一样。URL中
后面的部分称为查询,正是为此目的而创建的。它还允许用户只需将当前页面设置为书签,即可将喜爱的过滤器设置为书签,简化导航(不再显示“此文档已过期,是否要重新发送数据?”消息)。我不是说
POST
不起作用,而是说
GET
更干净


编辑:您可以完全替换
请求。使用
请求获取
。发布
如果您真的愿意,它也可以正常工作

为什么不尝试嵌套的if条件而不是if-else?@Chandan嵌套的条件不一定有相同的效果。如果您嵌套了
If
s和
value\u two
未设置,而
value\u two
为,则不会应用最后一个过滤器,因为outter If未计算。@MichalKrejčí根据我从问题中了解到的情况,只有在按
value\u two
进行过滤后,他才需要按
value\u two
进行过滤。但你的答案更一般,两者都适用。