from django import forms from django.db.models import Q from pgweb.core.models import Version class _version_choices(): def __iter__(self): yield ('-1', '** Select version') q = Q(supported=True) | Q(testing__gt=0) for v in Version.objects.filter(q): for minor in range(v.latestminor, -1, -1): if not v.testing or minor > 0: # For beta/rc versions, there is no beta0, so exclude it s = v.buildversionstring(minor) yield (s, s) yield ('Unsupported/Unknown', 'Unsupported/Unknown') class SubmitBugForm(forms.Form): name = forms.CharField(max_length=100, required=True) email = forms.EmailField(max_length=100, required=True) pgversion = forms.CharField(max_length=20, required=True, label="PostgreSQL version") os = forms.CharField(max_length=50, required=True, label="Operating system") shortdesc = forms.CharField(max_length=100, required=True, label="Short description") details = forms.CharField(required=True, widget=forms.Textarea) def __init__(self, *args, **kwargs): super(SubmitBugForm, self).__init__(*args, **kwargs) self.fields['pgversion'].widget = forms.Select(choices=_version_choices()) def clean_pgversion(self): if self.cleaned_data.get('pgversion') == '-1': raise forms.ValidationError('You must select a version') return self.cleaned_data.get('pgversion')