Django Model基于查询字符串进行过滤

时间:2015-02-02 08:49:05

标签: django filter models

我想过滤查询,我想根据查询字符串创建过滤器。

例如:

if request.GET.get('color'):
   #filter result set on the basis of color
if request.GET.get('price'):
   #filter result set on the basis of specified price
if request.GET.get('category'):
   #filter result set on the basis category

我们怎样才能在django中有效地做到这一点。我的数据库中有超过200万条记录。

2 个答案:

答案 0 :(得分:2)

可以这样做:

products = Product.objects.all()
for filter_field in ('color', 'price', 'category'):
    if request.GET.get(filter_field):
        products = products.filter(**{filter_field: request.GET[filter_field]})

该构造的效率仅取决于您的数据库结构,以及您在DB中的索引。因为django在返回之前不会执行查询。它构造了一个SQL查询作为结果。

答案 1 :(得分:0)

您可以像这样使用django&#ORM:

if request.GET.get('category'):
     category = request.GET.get('category')
     filtered_result = Product.objects.filter(category=category)