adding the advanced query form
This commit is contained in:
parent
c6c00f821d
commit
1d34d5c1ef
|
@ -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')
|
|
@ -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))
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue