django:过滤对象列表

问题描述:

我已经列出了我列出的对象列表(在这种情况下为租用属性),列表需要通过少数条件进行过滤(最大价格,面积,n_bedrooms ...),我想我能做到这一点是这样的:django:过滤对象列表

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

这工作,并允许类似的URL价格:300-600 /做合理的事情。

但是,它变得很困难时,有大约一半十几属性,一个可以通过以下方式过滤,并且我非常希望干净的URL(即不包括属性,为我们目前没有在URL过滤)

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

如果你并不需要扭转这些网址,你可以使用可选组:

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是非常好的,虽然)

+0

是的。我认为,只是想知道是否有更好的方法。我会思考它,谢谢你的时间! – Agrajag 2010-01-29 13:49:44

在Django做到这一点,正确的做法是亚历克斯·盖纳,由Alex Gaynor

它可以让你的过滤参数,HTTP GET和过滤你对这些约束条件的查询集犯错django-filter

从文档:

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

这需要过滤的照顾,但(不!)处理我上面提到的凌乱的部分,贮藏,urls-通过使用get参数来清理,这意味着你会得到冗长而杂乱的URL。或者,我可以忽略一些东西? – Agrajag 2010-01-28 14:05:43