Пустой список результатов при запуске страницы django-filter

Я использую https://github.com/alex/django-filter.

Когда пользователь впервые открывает страницу с фильтром, он видит пустую форму и полный список результатов.

Мне нужно не отображать результат, пока пользователь не нажмет «Поиск» в первый раз.

Другими словами - django-filter не должен отображать никаких результатов, если параметр list (в URL) пуст, и отображать все результаты, если параметр values (в URL) пуст.

скриншот

Источник

filters.py

import django_filters

from product.models import Product

class ProductFilter(django_filters.FilterSet):

    class Meta:
        model = Product
        fields = [ 'shortname', 'fullname', 'description', 'product_type' ]

views.py

from product.filters import ProductFilter

def product_search_in_ancestors(request, product_id):
    context = RequestContext(request)    
    p = get_object_or_404( Product, pk=product_id )

    q = Product.objects.filter( id__in = p.GetChilds() )

    filter = ProductFilter(request.GET , queryset=q )

    return render_to_response( 'product/product_search_in_ancestors.html',
        {'product':p,
        'filter': filter
         },
         context)

Ссылка на ту же проблему на github


person Y.N    schedule 13.05.2015    source источник
comment
Проблема в том, что фильтр по умолчанию возвращает ВСЕ результаты. Возможно, вам придется отредактировать свое представление. Вы можете опубликовать это?   -  person onyeka    schedule 13.05.2015
comment
Я разместил свой очень простой код   -  person Y.N    schedule 13.05.2015
comment
Я собирался сказать, что вы можете предотвратить отображение результатов, если в URL-адресе нет параметров, но я понял, что это также предотвратит отображение формы. Поэтому я не уверен, что то, что вы хотите, возможно, если вы не создадите отдельную страницу только для формы и другую с формой/результатами.   -  person onyeka    schedule 13.05.2015
comment
В лучшем случае я хочу отображать форму и результаты на одной странице. Это поведение django-filter по умолчанию.   -  person Y.N    schedule 14.05.2015


Ответы (1)


После некоторых исследований я нашел это простое решение

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = [ 'shortname', 'fullname', 'description', 'product_type',   ]

    def __init__(self, *args, **kwargs):
        super(ProductFilter, self).__init__(*args, **kwargs)
        # at sturtup user doen't push Submit button, and QueryDict (in data) is empty
        if self.data == {}:
            self.queryset = self.queryset.none()

Думаю, это решение стабильно. Как вы думаете?

person Y.N    schedule 14.05.2015
comment
Когда я пробую ваше решение, моя форма фильтра не отображается. - person jangeador; 05.10.2015
comment
Напишите подробнее, пожалуйста - person Y.N; 05.10.2015
comment
Да, когда я помещаю это в свою инициализацию, записи не отображаются, но и filter.form, содержащий мои фильтры, тоже. Если я вручную добавляю параметры в строку запроса get, форма отображается, но по умолчанию она просто не отображается в шаблоне. Я использую хрустящие формы, если это имеет значение. - person jangeador; 06.10.2015
comment
Может мое решение не подходит для хрустящих, я их не тестирую - person Y.N; 06.10.2015