diff options
-rw-r--r-- | main/utils.py | 3 | ||||
-rw-r--r-- | packages/views.py | 57 |
2 files changed, 23 insertions, 37 deletions
diff --git a/main/utils.py b/main/utils.py index eb0cb2a..f31689f 100644 --- a/main/utils.py +++ b/main/utils.py @@ -15,5 +15,8 @@ def render_response(req, *args, **kwargs): kwargs['context_instance'] = RequestContext(req) return render_to_response(*args, **kwargs) +#utility to make a pair of django choices +make_choice = lambda l: [(str(m), str(m)) for m in l] + # vim: set ts=4 sw=4 et: diff --git a/packages/views.py b/packages/views.py index 4a3db85..87d42b7 100644 --- a/packages/views.py +++ b/packages/views.py @@ -10,11 +10,12 @@ 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 datetime import datetime from archweb_dev.main.utils import render_response from archweb_dev.main.models import Package, PackageFile from archweb_dev.main.models import Arch, Repo, Signoff - +from archweb_dev.main.utils import make_choice def update(request): if request.POST.has_key('adopt'): @@ -53,45 +54,27 @@ def details(request, pkgid=0, name='', repo='', arch=''): return render_response(request, 'packages/details.html', {'pkg': pkg}) -class EmptySelectWidget(forms.widgets.Select): - '''Like any select box but allows you to use a custom string for the - 'empty' field.''' - def __init__(self, empty_string="All", attrs=None, choices=()): - self.empty_string = empty_string - super(EmptySelectWidget, self).__init__(attrs, choices) - - def render(self, name, value, attrs=None, choices=()): - if value is None: value = '' - final_attrs = self.build_attrs(attrs, name=name) - output = [u'<select%s>' % flatatt(final_attrs)] - # Normalize to string. - str_value = force_unicode(value) - for option_value, option_label in chain(self.choices, choices): - if option_value == '': - option_label = self.empty_string - option_value = force_unicode(option_value) - selected_html = ( - option_value == str_value) and u' selected="selected"' or '' - output.append(u'<option value="%s"%s>%s</option>' % ( - escape(option_value), selected_html, - conditional_escape(force_unicode(option_label)))) - output.append(u'</select>') - return mark_safe(u'\n'.join(output)) - class PackageSearchForm(forms.Form): - repo = forms.ModelChoiceField(Repo.objects.all(), - widget=EmptySelectWidget, required=False) - arch = forms.ModelChoiceField(Arch.objects.all(), - widget=EmptySelectWidget, required=False) + repo = forms.ChoiceField(required=False) + arch = forms.ChoiceField(required=False) keywords = forms.CharField(required=False) - maintainer = forms.ModelChoiceField(User.objects.all(), - widget=EmptySelectWidget, required=False) + maintainer = forms.ChoiceField(required=False) last_update = forms.DateField(required=False, widget=AdminDateWidget()) - limit = forms.ChoiceField(choices=[ - ('50', '50'), - ('100', '100'), - ('250', '250'), - ('All', 'All')], required=False) + limit = forms.ChoiceField( + choices=make_choice(['50', '100', '250', 'All']), + required=False) + + def __init__(self, *args, **kwargs): + super(PackageSearchForm, self).__init__(*args, **kwargs) + self.fields['repo'].choices = self.fields[ + 'repo'].widget.choices = [('', 'All')] + make_choice( + [repo.name for repo in Repo.objects.all()]) + self.fields['arch'].choices = self.fields[ + '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( + [m.username for m in User.objects.all()]) def search(request): if request.GET: |