bonjour, 

Peut-etre que je goure mais j'ai l'impression que le result est toujours
présent dans le context (peut-etre l'effet de ctx=mainCtx) alors qu'il
devrait être remis en à plat pour la recherche à venir. 

du coup je changerai l'indentation de ctx['result'] = result pour le
mettre au même niveau que ctx['formSearch'] = FormSearch() 

ainsi quand on arrive sur la page pour la première fois (ou une nouvelle
fois) result est remis à [] si on arrive sur la page via un post on
récupère potentiellement le QuerySet qui est parcouru par le for.

Cordialement 

Le 16.09.2014 15:37, Charlie Gentil a écrit : 

> Bonjour, 
> 
> Je souhaite créer un formulaire de recherche afin de retrouver des éléments 
> dans ma base de données. 
> 
> Pour cela j'ai créé un simple formulaire avec une zone de saisie dans ma page 
> search.html 
> 
> Voici ce que cela donne : 
> 
> {% extends "base.html" %} 
> 
> {% load static %} 
> 
> {% block content %} 
> 
> <form method="POST" action="search">{% csrf_token %} 
> 
> <table border:0px> 
> 
> <tr> 
> 
> <td>{{ formSearch.nom.label }}</td> 
> 
> <td>{{ formSearch.nom }}</td> 
> 
> </tr> 
> 
> </table> 
> 
> <p><input type="submit" value="Rechercher" name="search"/></p> 
> 
> </form> 
> 
> {% if result %} 
> 
> {% for c in result %} 
> 
> <a href= '/customers/record/{{ c.id }}'>{{ c.nom }}</a><br> 
> 
> {% endfor %} 
> 
> {% endif %} 
> 
> {% endblock %} 
> 
> Dans views.py j'ai cette fonction : 
> 
> def search(request): 
> 
> ctx = mainCtx 
> 
> result = [] 
> 
> if request.method == 'POST': 
> 
> print(request.POST) 
> 
> if request.POST.get('nom'): 
> 
> val = request.POST.get('nom') 
> 
> for c in Customers.objects.filter(nom__icontains = val): 
> 
> result.append(c) 
> 
> ctx['result'] = result 
> 
> ctx['formSearch'] = FormSearch() 
> 
> return render(request, 'customer/search.html', ctx) 
> 
> Lorsque je lance la commande python manage.py runserver, que je clique sur le 
> lien me permettant d'accéder à la page search.html tout ce passe bien. 
> 
> Ma recherche se fait correctement et je peux accéder à la page d'un client en 
> cliquant sur son nom. 
> 
> Par contre si je reclique sur le lien me permettant d'accéder à search.html, 
> j'ai le message d'erreur suivant : 
> 
> Error during template rendering 
> 
> In template 
> /home/charlie/Development/projet/projet/templates/customer/search.html, error 
> at line 42 
> 
> 'Customers' object is not iterable 
> 
> 32 
> 
> </tr> 
> 
> 33 
> 
> 34 
> 
> 35 
> 
> </table> 
> 
> 36 
> 
> 37 
> 
> 38 
> 
> <p><input type="submit" value="Rechercher" name="search"/></p> 
> 
> 39 
> 
> </form> 
> 
> 40 
> 
> 41 
> 
> 42 
> 
> {% for c in result %} 
> 
> 43 
> 
> <a href= '/customers/record/{{ c.id }}'>{{ c.nom }}</a><br> 
> 
> 44 
> 
> {% endfor %} 
> 
> 45 
> 
> 46 
> 
> 47 
> 
> <br><br> 
> 
> 48 
> 
> 49 
> 
> 50 
> 
> 51 
> 
> 52 
> 
> Je cherche d'où cela peut venir mais je ne trouve pas. 
> 
> Quelqu'un aurait-il une idée ou éventuellement un exemple d'une autre manière 
> de faire ce que je cherche ? 
> 
> D'avance merci 
> 
> Charlie 
> 
> _______________________________________________
> django mailing list
> [email protected]
> http://lists.afpy.org/mailman/listinfo/django [1]
 

Links:
------
[1] http://lists.afpy.org/mailman/listinfo/django
_______________________________________________
django mailing list
[email protected]
http://lists.afpy.org/mailman/listinfo/django

Répondre à