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

Django Model filters on the basis of query string

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

例如:

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 万条记录。

可以这样做:

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]})

该构造的效率仅取决于您的数据库结构,取决于您在数据库中拥有的索引。因为 django 在 return 之前不执行查询。它构造一个 SQL 查询作为结果。

你可以像这样使用 django 的 ORM:

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