Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Création d'un formulaire de recher che dans la base de données

#1 16-09-2014 14:37:01

Doline
Membre
Inscription : 06-08-2014
Messages : 22

Création d'un formulaire de recher che dans la base de données

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

Hors ligne

#2 16-09-2014 15:18:20

Olivier
Membre
Inscription : 21-07-2016
Messages : 8

Re : Création d'un formulaire de recher che dans la base de données

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
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django [1]


Links:
------
[1] http://lists.afpy.org/mailman/listinfo/django

Hors ligne

  • Accueil
  • » Django-fr
  • » Création d'un formulaire de recher che dans la base de données

Pied de page des forums