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是非常好的,虽然)
答
在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
是的。我认为,只是想知道是否有更好的方法。我会思考它,谢谢你的时间! – Agrajag 2010-01-29 13:49:44