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