Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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,如何创建一个查询来过滤这样的模型 我的模型是: class test(models.Model): name = models.CharField(max_length=50) status = models.CharField(max_length=50) other = models.CharField(max_length=50) 我希望这样,而不是使用AND或我过滤查询。我曾尝试将|改为&但不起作用。为了使其更复杂,如果我在模板上设置了过滤器作为表单,则: Fi

如何创建一个查询来过滤这样的模型

我的模型是:

class test(models.Model):
    name = models.CharField(max_length=50)
    status = models.CharField(max_length=50)
    other = models.CharField(max_length=50)
我希望这样,而不是使用AND或我过滤查询。我曾尝试将|改为&但不起作用。为了使其更复杂,如果我在模板上设置了过滤器作为表单,则:

Filter By Name: DropDownList of Names
Filter By Status: DropDownList of Statuses
Filter By Other: DropDownList of Others
如果从下拉框中选择name1、status1和other1,则应显示以下结果:

results = test.objects.filter(name=name1,status=status1,other=other1)
以下是我在views.py中的当前查询:

def search(request):
    query = request.GET.get('q', '')
    if query:
        qset = (
            Q(name__icontains=query) |
            Q(status__icontains=query) |
            Q(other__icontains=query)
        )
        results = test.objects.filter(qset).distinct()
    else:
        results = []
    return render_to_response("test/search.html", {
        "results": results,
        "query": query
    })
当前仅搜索名称、状态或其他。如果我将|更改为-,它将搜索所有这些内容,但在显示结果时不会显示任何内容,因为表单下拉框中的查询处理未链接。如何链接它们?如何为特定字段的下拉列表设置“全部”选项


我希望我已经说清楚了。谢谢。

我建议您看看这个应用程序。它可以通过表单下拉菜单自动化所有例程,并通过搜索/筛选查询生成查询集:

Django filter是一个可重用的Django应用程序,允许用户 动态筛选查询集。它需要Python2.4或更高版本。对于 使用和安装说明请参阅文档目录

Django过滤器可用于生成与 Django管理员的
列表过滤器
界面。它有一个非常相似的API
到Django的
ModelForms
。例如,如果您有一个产品模型 您可以为其设置一个过滤器集,代码为:

import django_filters

class ProductFilterSet(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = ['name', 'price', 'manufacturer']
在你看来,你可以这样做:

def product_list(request):
    filterset = ProductFilterSet(request.GET or None)
    return render_to_response('product/product_list.html',
        {'filterset': filterset})
有关更多信息,请参阅文档目录


还有,
category
与您的车型有什么关系?非常感谢,就是这个