You need to pass the current search paramters in your query string
(?party=D&q=<txt>&page=<num> ) when you create the links to all the
pages, and you need to be able to retrieve them from request.GET in
order to recreate the object list (reps) when rendering a specific
page (any particular reason why are you using POST in the search
form?).

hth,
Nuno

On Tue, May 11, 2010 at 1:58 AM, Nick <nickt...@gmail.com> wrote:
> I'm trying to paginate results from a search with multiple options.
> The only problem is, once I hit the next button it clears the query
> and I'm left paginating all the objects in the DB.
>
> Here is my view:
>
> def filter_search(request):
>    if request.POST:
>        reps = Rep.objects.all()
>    else:
>        reps = []
>    query = request.POST
>    if 'q' in request.POST:
>        q = request.POST.get('q', '')
>        qset = (
>        Q(Last_Name__icontains=q) | Q(First_Name__icontains=1)
>               )
>        reps = reps.filter(qset)
>    else:
>        q = []
>    if len(q):
>        qlist = q
>    else:
>        qlist = []
>    if 'party' in request.POST:
>        party = request.POST.getlist('party')
>        reps = reps.filter(Party__in=party)
>    else:
>        party = []
>    if len(party):
>        plist = party
>    else:
>        plist = []
>    paginator = Paginator(reps, 15)
>    results = paginator.count
>    try:
>        page = int(request.POST.get('page', '1'))
>    except:
>        page = 1
>    try:
>        repList = paginator.page(page)
>    except (EmptyPage, InvalidPage):
>        repList = paginator.page(paginator.num_pages)
>    finalq = request.POST
>    return render_to_response("Government/search.html", {
>            'reps': repList,
>            'query': query,
>            'plist': plist,
>            'qlist': qlist,
>            'results': results,
>            'finalq': finalq
> })
>
> Here is my tpl:
>
>
>        <form action="" method="POST"><br />
>        <input type="text" name="q"><br />
>        Democrat  <input type="checkbox" name="party" value="D">
>        Republican <input type="checkbox" name="party" value="R">
>        <input type="submit" value="Search">
>        </form>
>
> {% if query %}
> <h3>Your search for {% if qlist %} <span>{{ qlist}}</span> {% endif %}
> {% if plist %} {% for p in plist %} {% if forloop.first %} <span>Party
> ({{ p }})</span> {% else %} & <span> Party ({{p}})</span> {% endif %}
> {% endfor %}{% endif %} returned <span>{{ reps.paginator.count }}</
> span> result(s)</h3>
> <ul>
> {% for object in reps.object_list %}
> <li>{{ object.Position }} {{ object.First_Name }}
> {{ object.Last_Name }} <a href="http://django.newsok.com/government/
> reps/{{ object.Last_Name }}_{{ object.First_Name}}">view more</a></li>
> {% endfor %}
> </ul>
>
>
> <div id="pagination">
> {% if reps.has_previous %}
> <a class="activePrev"
> href="&page={{ reps.previous_page_number }}">Previous</a>
> {% else %}
> <a class="nullPrev">Previous</a>
> {% endif %}
>
>
> {% if reps.has_next %}
> <a class="activeNext" href="&page={{ reps.next_page_number }}">Next</
> a>
> {% else %}
> <a class="nullNext" href="">Next</a>
> {% endif %}
> </div>
>
>
> That href is the cause of the problem, how do I pass a page to the url
> without resetting the query?
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to