2017-08-22 3 views
1

J'utilise django-filter pour rechercher un modèle. Voici le code:Django-Filter: Créer dynamiquement un jeu de requête à la recherche ou masquer le jeu de requête jusqu'à la recherche

filters.py:

class PersonFilter(django_filters.FilterSet): 
    lastName = django_filters.CharFilter(lookup_expr='icontains') 
    firstName = django_filters.CharFilter(lookup_expr='icontains') 
    class Meta: 
     model = Person 
     fields = ['lastName', 'firstName'] 

views.py:

def search(request): 
    people = Person.objects.all() 
    people = PersonFilter(request.GET, queryset=people) 
    context = {'filter': people} 
    return render(request, 'myapp/template.html', context) 

template.html:

<form method="get"> 
    {{ filter.form.as_p }} 
    <button type="submit">Search</button> 
    </form> 
    <table> 
    {% for field in filter.qs %} 
    <tr> 
    <td> 
     {{ field.idno }} 
    </td> 
    <td> 
     {{ field.lastName }} 
    </td> 
    <td> 
     {{ field.firstName }} 
    </td> 
    <td> 
     {{ field.status }} 
    </td> 
    </tr> 
    {% endfor %} 
</table> 
{% endblock %} 
</body> 
</html> 

En ce moment, il en résulte une table cela reflète mon modèle avec des boîtes de recherche pour le prénom et le nom de famille. La recherche fonctionne parfaitement.

Comment puis-je empêcher le tableau de données d'apparaître initialement? Logiquement, cela pourrait être fait superficiellement (hide) ou, mieux encore, substantiellement (créer un queryset dynamiquement). Est-ce possible?

Répondre

0

Vous pouvez tirer parti de la propriété is_bound de FilterSet, bien que vous deviez modifier le code de vue pour fournir uniquement les paramètres de requête de requête lorsque le formulaire a été soumis.

def search(request): 
    submitted = 'submitted' in request.GET 
    data = request.GET if submitted else None 
    people = PersonFilter(data, queryset=Person.objects.all()) 

    return render(request, 'myapp/template.html', {'filter': people}) 
<form method="get"> 
    {{ filter.form.as_p }} 
    <button type="submit" name="submitted">Search</button> 
        <!-- ^^^^ added 'name' parameter --> 
</form> 

{% if filter.is_bound %} 
<table> 
{% for person in filter.qs %} 
...