Django中的动态价格范围过滤器

时间:2020-09-07 16:32:47

标签: python html django

我有一个产品模型,该模型具有属性名称,价格,描述,类别。 我想创建一个带有视图中复选框的动态价格范围过滤器。 例如,如果我查询我的产品,如下所示:

get_products = Product.objects.filter(category ='Men')

现在,如果上面的查询包含min_price = 500和max_price = 5000的产品列表,那么我想拥有4组价格范围过滤器,如下所示: 1)500-1500 2)1501-2500 3)2501-3800 4)3801-5000

但是上述操作应该基于最小和最大价格值进行。

我尝试使用范围(最小,最大,步长),但是很难生成动态的价格范围过滤器。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用Django Aggregation并使用s.th。像这样:

# Imports
from django.db.models import Max
from django.db.models import Min

def price_range_filters(self):

    # Get Max and Min Value of Queryset
    max_price = Product.objects.all().aggregate(Max('price'))
    min_price = Product.objects.all().aggregate(Min('price'))

    # Split the range into 4
    range_step = (max_price - min_price) / 4

    # create context 
    context = {
        'max_price': max_price,
        'min_price': min_price,
        'range_step': range_step
    }

    # return objects and render page
    return render(request, 'your_site.html', context) 

然后,您可以在客户端使用变量max_price + min_price + range_step使用Javascript更新价格范围复选框。

根据html / frontend的逻辑,您还可以将范围直接包装到变量中的视图中,并将其呈现出来。