我正在使用https://github.com/alex/django-filter
当用户第一次打开带过滤器的页面时,他们会看到空的表单和完整的结果列表。
在用户第一次按“搜索”之前,我不需要显示结果。
换句话说 - 如果参数 list (在url中)为空,则django-filter不应显示任何结果,如果参数值(在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)
答案 0 :(得分:3)
经过一些研究,我发现了这个简单的解决方案
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()
我认为,这个解决方案很稳定。你觉得怎么样?