adding the advanced query form

This commit is contained in:
Fred Pauchet 2012-06-18 21:56:53 +02:00
parent c6c00f821d
commit 1d34d5c1ef
5 changed files with 80 additions and 13 deletions

16
cards/forms.py Normal file
View File

@ -0,0 +1,16 @@
#coding=utf-8
from django import forms
class AdvancedQueryForm(forms.Form):
WITH_CHIP_CHOICES = (
('Unknown', 'Afficher toutes les cartes'),
('True', 'Seulement les cartes avec puce'),
('False', 'Seulement les cartes sans puce'),
)
label = forms.CharField(max_length=100, label='Label')
country = forms.CharField(max_length=100, label='Pays')
with_chip = forms.ChoiceField(label='Puce', choices=WITH_CHIP_CHOICES)
year_begin = forms.IntegerField(label='Date de début')
year_end = forms.IntegerField(label='Date de fin')

View File

@ -1,5 +1,5 @@
# Create your views here.
#coding utf-8
#coding=utf-8
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse, Http404
@ -10,6 +10,8 @@ from cards.models import Item, Country, Category, SubCategory
from django.core.context_processors import csrf
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import cards.forms
def index(request):
cards_list = Item.objects.order_by('-created_at')[:25]
@ -25,7 +27,7 @@ def details(request, item_id):
return render_to_response('cards/details.html', RequestContext(request, context))
def pagination(cards_list, request):
paginator = Paginator(cards_list, 25)
paginator = Paginator(cards_list, 20)
page = request.GET.get('page')
@ -35,6 +37,8 @@ def pagination(cards_list, request):
cards = paginator.page(1)
except EmptyPage:
cards = paginator.page(paginator.num_pages)
return cards
def query(request):
@ -55,12 +59,51 @@ def query(request):
cards = pagination(cards_list, request)
context = { 'cards_list' : cards, 'title' : 'Recherche sur les termes : ' + terms }
context = { 'cards' : cards, 'title' : 'Recherche sur les termes : ' + terms }
return render_to_response('cards/list.html', RequestContext(request, context))
def advanced_query(request):
context = { }
if request.method == 'POST':
form = cards.forms.AdvancedQueryForm(request.POST)
if form.is_valid():
print 'form is valid'
from django.db.models import Q
q = Q()
# le label d'abord...
for term in form.label.split(' '):
q.add(Q(label__icontains=term), q.OR)
# le ou les pays
for term in form.country.split(' '):
q.add(Q(country__label__icontains=term), q.OR)
# avec puce ou sans puce (ou sans rien...)
if form.with_chip is not 'Unknown':
if form.with_chip == 'True':
q.add(Q(with_chip__isTrue), q.AND)
else:
q.add(Q(with_chip__isNotTrue), q.AND)
# la date de début
# faut modifier le modèle ici...
cards_list = Item.objects.filter(q)
cards_list = pagination(cards_list, request)
context = { 'cards' : cards_list, 'title' : 'Recherche avancée' }
return render_to_response('cards/list.html', RequestContext(request, context))
else:
form = cards.forms.AdvancedQueryForm()
context = { 'form' : form }
return render_to_response('cards/advanced_query.html', RequestContext(request, context))
@ -69,7 +112,7 @@ def search_by_country(request, country_id):
cards = pagination(country.item_set.all(), request)
context = { 'cards_list' : cards, 'title' : country.label }
context = { 'cards' : cards, 'title' : country.label }
return render_to_response('cards/list.html', RequestContext(request, context))
@ -83,7 +126,7 @@ def search_by_category(request, category_id):
cards = pagination(cards_list, request)
context = { 'cards_list' : cards, 'title' : category.label }
context = { 'cards' : cards, 'title' : category.label }
return render_to_response('cards/list.html', RequestContext(request, context))
@ -92,6 +135,6 @@ def search_by_subcategory(request, subcategory_id):
cards = pagination(subcategory.item_set.all(), request)
context = { 'cards_list' : cards, 'title' : subcategory.label }
context = { 'cards' : cards, 'title' : subcategory.label }
return render_to_response('cards/list.html', RequestContext(request, context))

View File

@ -1 +1,10 @@
{% extends 'base.html' %}
{% block main_container %}
<form action="/advanced-query/" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Envoyer!" />
</form>
{% endblock %}

View File

@ -21,7 +21,7 @@
<div class="pagination">
<span class="step-links">
{% if cards.has_previous %}
<a href="?page={{ contacts.previous_page_number }}">page précédente</a>
<a href="?page={{ cards.previous_page_number }}">page précédente</a>
{% endif %}
<span class="current">
@ -29,7 +29,7 @@
</span>
{% if cards.has_next %}
<a href="?page={{ contacts.next_page_number }}">page suivante</a>
<a href="?page={{ cards.next_page_number }}">page suivante</a>
{% endif %}
</span>
</div>

View File

@ -17,21 +17,20 @@
Pays
</li>
{% for country in countries %}
<li><a href="{% url list-by-country country.id 1 %}">{{country.label}}</a>
<li><a href="{% url list-by-country country.id %}">{{country.label}}</a>
{% endfor %}
<li class="nav-header">
Catégories
</li>
{% for cat in categories %}
<li><a href="{% url list-by-category cat.id 1 %}">{{cat.label}}</a>
<li><a href="{% url list-by-category cat.id %}">{{cat.label}}</a>
<ul class="nav nav-list">
{% for subcat in cat.subcategory_set.all %}
<li><a href="{% url list-by-subcategory subcat.id 1 %}">{{subcat.label}}</a>
<li><a href="{% url list-by-subcategory subcat.id %}">{{subcat.label}}</a>
{% endfor %}
</ul>
</li>
{% endfor %}
<li class="divider"></li>
<li><a href="#"><i class="icon-book"></i>Recherche avancée</a></li>
</ul>
</div>