From fcc2a8a480b9d54912a2ba27f647f74a3e63307f Mon Sep 17 00:00:00 2001 From: Dusty Phillips Date: Tue, 7 Oct 2008 15:59:40 -0400 Subject: make form submit some but not all values --- devel/views.py | 4 +-- packages/views.py | 61 +++++++++++++++++++++++++-------- templates/packages/search.html | 77 +++++++++++++++++++++++++++--------------- urls.py | 1 + 4 files changed, 99 insertions(+), 44 deletions(-) diff --git a/devel/views.py b/devel/views.py index 77d4054..b372479 100644 --- a/devel/views.py +++ b/devel/views.py @@ -1,10 +1,10 @@ from django import forms -from django.http import HttpResponse, HttpResponseRedirect +from django.http import HttpResponseRedirect from django.contrib.auth.models import User from archweb_dev.main.utils import render_response from archweb_dev.main.models import Package, Todolist from archweb_dev.main.models import Arch, Repo -from archweb_dev.main.models import UserProfile, News, Donor, Mirror +from archweb_dev.main.models import UserProfile, News def index(request): '''the Developer dashboard''' diff --git a/packages/views.py b/packages/views.py index 87d42b7..a42c9d1 100644 --- a/packages/views.py +++ b/packages/views.py @@ -1,16 +1,12 @@ +import urllib from django import forms -from itertools import chain from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 -from django.forms.util import flatatt from django.contrib.auth.models import User -from django.utils.safestring import mark_safe -from django.utils.encoding import force_unicode -from django.utils.html import escape, conditional_escape from django.contrib.admin.widgets import AdminDateWidget -from django.views.generic import list_detail, create_update +from django.views.generic import list_detail from datetime import datetime from archweb_dev.main.utils import render_response from archweb_dev.main.models import Package, PackageFile @@ -61,8 +57,21 @@ class PackageSearchForm(forms.Form): maintainer = forms.ChoiceField(required=False) last_update = forms.DateField(required=False, widget=AdminDateWidget()) limit = forms.ChoiceField( - choices=make_choice(['50', '100', '250', 'All']), - required=False) + choices=make_choice([50, 100, 250]) + [('', 'All')], + required=False, + initial=50) + + def clean_limit(self): + limit = self.cleaned_data['limit'] + if limit: + try: + limit = int(limit) + except: + raise forms.ValidationError("Should be an integer") + else: + limit = None + return limit + def __init__(self, *args, **kwargs): super(PackageSearchForm, self).__init__(*args, **kwargs) @@ -73,20 +82,44 @@ class PackageSearchForm(forms.Form): 'arch'].widget.choices = [('', 'All')] + make_choice( [arch.name for arch in Arch.objects.all()]) self.fields['maintainer'].choices = self.fields[ - 'maintainer'].widget.choices = [('', 'All')] + make_choice( + 'maintainer'].widget.choices = [ + ('', 'All'), ('orphan', 'Orphan')] + make_choice( [m.username for m in User.objects.all()]) -def search(request): +def search(request, page=None): + current_query = '?' + limit=50 + packages = Package.objects.all() + if request.GET: + current_query += urllib.urlencode(request.GET) form = PackageSearchForm(data=request.GET) if form.is_valid(): - pass + if form.cleaned_data['repo']: + packages = packages.filter( + repo__name=form.cleaned_data['repo']) + if form.cleaned_data['arch']: + packages = packages.filter( + arch__name=form.cleaned_data['arch']) + if form.cleaned_data['maintainer'] == 'orphan': + packages=packages.filter(maintainer__id = 0) + elif form.cleaned_data['maintainer']: + packages = packages.filter( + maintainer__username=form.cleaned_data['maintainer']) + limit = form.cleaned_data['limit'] + else: form = PackageSearchForm() - page_dict = {'search_form': form} - return render_to_response('packages/search.html', - RequestContext(request, page_dict)) + page_dict = {'search_form': form, + 'current_query': current_query + } + return list_detail.object_list(request, packages, + template_name="packages/search.html", + page=page, + paginate_by=limit, + template_object_name="package", + extra_context=page_dict) diff --git a/templates/packages/search.html b/templates/packages/search.html index a181801..54d04ef 100644 --- a/templates/packages/search.html +++ b/templates/packages/search.html @@ -10,7 +10,7 @@ {% block content %}

Search Criteria

-
+ @@ -34,48 +34,69 @@

- {% if results %} + {% if package_list %}
Arch
- - - + + + - - + + - {% for pkg in results %} - - - - - - {% if pkg.needupdate %} - - {% else %} - + {% for pkg in package_list %} + + + + + + {% if pkg.needupdate %} + + {% else %} + + {% endif %} + + + + + {% endfor %} + {% if paginator %} + + + + +
+ {% endif %} - - - - - {% endfor %} - - - - - -
 ArchRepoNameArchRepoName Version DescriptionMaintainerLast UpdatedMaintainerLast Updated
{{ pkg.arch.name }}{{ pkg.repo.name|capfirst }}{{ pkg.pkgname }}{{ pkg.pkgver }}-{{ pkg.pkgrel }}{{ pkg.pkgver }}-{{ pkg.pkgrel }}
{{ pkg.arch.name }}{{ pkg.repo.name|capfirst }}{{ pkg.pkgname }}{{ pkg.pkgver }}-{{ pkg.pkgrel }}{{ pkg.pkgver }}-{{ pkg.pkgrel }}{{ pkg.pkgdesc }}{{ pkg.maintainer|default:"Orphan" }}{{ pkg.last_update|date:"Y-m-d" }}
+ {{paginator.count}} packages found. + Page {{page_obj.number}} of {{paginator.num_pages}}. + + {% if page_obj.has_previous %} + + <<< Previous + + {% else %} + <<< Previous + {% endif %} + + {% if page_obj.has_next %} + + Next >>> + + {% else %} >>> + Next + {% endif %} +
{{ pkg.pkgdesc }}{{ pkg.maintainer|default:"Orphan" }}{{ pkg.last_update|date:"Y-m-d" }}
{% if prevpage %}
<<< Prev{% endif %}
 {% if nextpage %}
Next >>>{% endif %}
   
{% endif %} diff --git a/urls.py b/urls.py index 55b9a37..a41bcc3 100644 --- a/urls.py +++ b/urls.py @@ -16,6 +16,7 @@ urlpatterns = patterns('', (r'^packages/signoff_package/(?P[A-z0-9]+)/(?P[A-z0-9\-+.]+)/$', 'archweb_dev.packages.views.signoff_package'), (r'^packages/search/$', 'archweb_dev.packages.views.search'), + (r'^packages/search/(?P\d+)/$', 'archweb_dev.packages.views.search'), (r'^packages/update/$', 'archweb_dev.packages.views.update'), (r'^packages/(?P\d+)/$', 'archweb_dev.packages.views.details'), (r'^packages/(?P[A-z0-9]+)/$', 'archweb_dev.packages.views.details'), -- cgit v1.2.3-24-g4f1b