Je suie le cours sur la programmation Web en Python (Django). J'ai créer une petite application qui permet grace a une page web entering_data.html de stocker dans une base de données des produits alimentaires. Grace a une deuxième page consulting_data.html, je peux consulter les produits enregistre et en particulier ceux qui correspondent a certains critères saisi via un formulaire dans consulting_data.html.
Problème: En fait la page renvoie par défaut tout les produits sans problème mais quand je veux récupérer un produit en particulier, il me renvoie un tableau vide!!
Ci-joint, mes deux fichiers: views.py (je n'ai mis que la fonction qui permet l'affichage des données), et la page web consulting_data.html:
views.py:
def data_consulting(request):
# TODO: Search Form does not work, you may fix it when your will read the second chapter in third part of the book.
if request.method == 'POST':
form = FilterForm(request.POST)
if form.is_valid():
conditions = [('toBuy', form.cleaned_data['toBuy']), ('name__contains', form.cleaned_data['searchName']),
(('price__gte', form.cleaned_data['searchPriceBegin']), ('price__lte', form.cleaned_data['searchPriceEnd'])),
(('calories__gte', form.cleaned_data['searchCalorieBegin']),
('calories__lte', form.cleaned_data['searchCalorieEnd'])),
(('date__gte', form.cleaned_data['DateBegin']), ('date__lte', form.cleaned_data['DateEnd']))]
all_products = Product.objects.filter(reduce(operator.or_, [Q(condition) for condition in conditions]))
send = True
all_products = Product.objects.filter(reduce(operator.or_, [Q(condition) for condition in conditions]))
else:
form = FilterForm()
all_products = Product.objects.all()
sum_price = sum_product_by('price')
sum_calories = int(sum_product_by('calories'))
return render(request, 'mealManager/data_consulting.html', locals())
# Function can sum all attribute by field given as parameter:
# Remark: The Field must be Integer or Float
def sum_product_by(field):
result = 0.0
for product in Product.objects.all():
result += product.__getattribute__(field)
return result
data_consulting.html
{% extends "base.html" %}
{% block title %}
Consulter les Produits
{% endblock %}
<!-- TODO me: Maybe i may put a Scroll bar when the table will be bigger-->
{% block content %}
<!-- Ameliorations:
Personnaliser l'affichage:
- chercher un produit en particulier par nom.
- calculer lle montant totale des produit achete dans une date precise ou dans une perdiode precise.
-->
<div class="search">
<form method="post" action="{% url "mealManager.views.data_consulting" %}">{% csrf_token %}
<div class ="block1">
<fieldset class="searchField1">
<legend>Par nom:</legend>
<p> <label for="id_searcheName">Nom</label> : {{ form.searchName }} </p>
</fieldset>
<fieldset class="searchField5">
<legend>Par Date:</legend>
<p>
<label for="id_DateBegin" class="text_label"> Le: </label><br /> {{ form.DateBegin }}
<label for="id_DateEnd" class="text_label1" > Le: </label><br /> {{ form.DateEnd }}
</p>
</fieldset>
<fieldset class="searchField2">
<legend>En Stock:</legend>
<p>
{{ form.toBuy }} <label for="id_toBuy">En Stock ?</label><br />
</p>
</fieldset>
</div>
<div class="block2">
<fieldset class="searchField3">
<legend>Par Nombres de Calories:</legend>
<p>
<label for="id_searchCalorieBegin" class="text_label3">Min:</label><br /> {{ form.searchCalorieBegin }}
<label for="id_searchCalorieEnd" class="text_label4">Max:</label><br /> {{ form.searchCalorieEnd }}
</p>
</fieldset>
<fieldset class="searchField4">
<legend>Par Prix:</legend>
<p>
<label for="id_searchPriceBegin" class="text_label3">Min:</label><br /> {{ form.searchPriceBegin }}
<label for="id_searchPriceEnd" class="text_label4">Max:</label><br /> {{ form.searchPriceEnd }}
</p>
</fieldset>
<p class="search_send"><input type="submit", value="Afficher Resultats"></p>
</div>
</form>
{{ all_products }}
</div>
<table>
<thead>
<tr>
<td>Nom</td>
<td>Prix en euro</td>
<td>Nombre de calorie</td>
<td>Date</td>
<td>Quantite</td>
<td>Categorie</td>
<td>Type de Saisi</td>
</tr>
</thead>
<tbody style="width:800px; height:400px; overflow:auto;">
{% for product in all_products %}
<tr>
<td>{{ product.name }}</td>
<td>{{ product.price }}</td>
<td>{{ product.calories }}</td>
<td>{{ product.date }}</td>
<td>{{ product.quantity }}</td>
<td>{{ product.category }}</td>
<td>
{% if product.toBuy %}
<img src="/static/images/yes.png">
{% else %}
<img src="/static/images/No.png">
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
<tfoot>
<td></td>
<td>{{ sum_price }}</td>
<td>{{ sum_calories }}</td>
</tfoot>
</table>
<p><a href="{% url "mealManager.views.data_entry" %}"><input type="submit", value="Enregistrer un produit..."></a></p>
{% endblock %}
- Edité par smiasaad 8 août 2015 à 22:50:46
Django: Rrecherche avancée (multicritère)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.