我列出了我列出的对象列表(在这种情况下是出租物业),列表需要通过一些标准(最高价格,面积,n_bedrooms ......)过滤,我想我可以这样做:
(r'^price:(?P<price_min>\d+)?-(?P<price_max>\d+)?/$', property_list)
这是有效的,并允许像价格这样的网址:300-600 /来做明智的事情。
然而,当有大约六个属性可以过滤时,它变得笨拙,理想情况下我想要干净的网址(即不包括我们目前没有在网址中过滤的属性)
在Django中有没有“标准”的方法来处理这个问题?
答案 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非常好)