django: фильтрация списка объектов - PullRequest
2 голосов
/ 28 января 2010

У меня есть список объектов (в данном случае свойств для аренды), которые я перечисляю, список должен быть фильтруемым по нескольким критериям (максимальная цена, площадь, n_bedrooms ...), и я решил, что Я мог бы сделать это так:

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

Это работает, и позволяет URL как цена: 300-600 / делать разумную вещь.

Однако, это становится громоздким, когда есть около полудюжины атрибутов, по которым можно фильтровать, и в идеале я хотел бы, чтобы чистые URL-адреса (т. Е. Не включая атрибуты, по которым мы не фильтруем в настоящее время в URL)

Есть ли "стандартный" способ справиться с этим в Django?

Ответы [ 2 ]

4 голосов
/ 28 января 2010

Правильный способ сделать это в django - это Алекс Гейнор, ошибка django-filter by 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})
2 голосов
/ 28 января 2010

Если вам не нужно изменять эти URL, вы можете использовать дополнительные группы:

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:

* +1007 *

(хотя django_filters очень хорош)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...