django:过滤对象列表

时间:2010-01-28 12:44:47

标签: django url filtering

我列出了我列出的对象列表(在这种情况下是出租物业),列表需要通过一些标准(最高价格,面积,n_bedrooms ......)过滤,我想我可以这样做:

(r'^price:(?P<price_min>\d+)?-(?P<price_max>\d+)?/$', property_list)

这是有效的,并允许像价格这样的网址:300-600 /来做明智的事情。

然而,当有大约六个属性可以过滤时,它变得笨拙,理想情况下我想要干净的网址(即不包括我们目前没有在网址中过滤的属性)

在Django中有没有“标准”的方法来处理这个问题?

2 个答案:

答案 0 :(得分:4)

在django中执行此操作的正确方法是Alex Gaynor,错误django-filter Alex Gaynor

它允许您以http get的形式获取过滤器参数,并根据这些约束过滤您的查询集。

来自文档:

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

答案 1 :(得分:2)

如果您不需要撤消这些网址,则可以使用可选组:

urls.py:

#the regex might need some work, it's just a concept
(r'^(price(/(?P<price_min>\d+))?(/to/(?P<price_max>\d+))?/$ 

views.py:

def view(request,min_price=None,max_price=None):
    ...

(虽然django_filters非常好)