我有一个要列出的对象列表(在本例中为出租特性),该列表需要通过一些标准(最高价格、面积、n_bedrooms ...)进行过滤,我想我可以这样做:
(r'^price:(?P<price_min>\d+)?-(?P<price_max>\d+)?/$', property_list)
这很有效,并且允许像price:300-600/这样的URL来做明智的事情。
但是,当有大约六个属性可供过滤时,它会变得很笨拙,并且理想情况下我想要干净的网址(即不包括我们当前未在网址中过滤的属性)
Django 中有处理这个问题的“标准”方法吗?
最佳答案
在 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})
关于django:过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2154535/