class DirectorySearchForm(FormControlWidgetMixin, forms.Form): SEARCH_METHOD_CHOICES = ( ('starts_with', _('Starts With')), ('contains', _('Contains')), ('exact', _('Exact')), ) search_category = forms.ChoiceField(label=_('Search By'), choices=SEARCH_CATEGORIES_ADMIN, required=False) category = CategoryField(label=_('All Categories'), choices=[], required=False) sub_category = CategoryField(label=_('All Subcategories'), choices=[], required=False) q = forms.CharField(required=False) search_method = forms.ChoiceField(choices=SEARCH_METHOD_CHOICES, required=False, initial='exact') def __init__(self, *args, **kwargs): is_superuser = kwargs.pop('is_superuser', None) super(DirectorySearchForm, self).__init__(*args, **kwargs) if not is_superuser: self.fields['search_category'].choices = SEARCH_CATEGORIES categories, sub_categories = Directory.objects.get_categories() categories = [(cat.pk, cat) for cat in categories] categories.insert(0, ('', _('All Categories (%d)' % len(categories)))) sub_categories = [(cat.pk, cat) for cat in sub_categories] sub_categories.insert( 0, ('', _('All Subcategories (%d)' % len(sub_categories)))) self.fields['category'].choices = categories self.fields['sub_category'].choices = sub_categories def clean(self): cleaned_data = self.cleaned_data q = self.cleaned_data.get('q', None) cat = self.cleaned_data.get('search_category', None) if cat is None or cat == "": if not (q is None or q == ""): self._errors['search_category'] = ErrorList( ['Select a category']) if cat in ('id', 'owner__id', 'creator__id'): try: x = int(q) except ValueError: self._errors['q'] = ErrorList(['ID must be a number.']) return cleaned_data
class ArticleSearchForm(FormControlWidgetMixin, forms.Form): search_category = forms.ChoiceField(choices=SEARCH_CATEGORIES_ADMIN, required=False, label=_(u'Search by')) q = forms.CharField(required=False) category = CategoryField(label=_('All Categories'), choices=[], required=False) sub_category = CategoryField(label=_('All Subcategories'), choices=[], required=False) filter_date = forms.BooleanField(required=False) date = forms.DateField(initial=date.today(), required=False) def __init__(self, *args, **kwargs): is_superuser = kwargs.pop('is_superuser', None) super(ArticleSearchForm, self).__init__(*args, **kwargs) if not is_superuser: self.fields['search_category'].choices = SEARCH_CATEGORIES categories, sub_categories = Article.objects.get_categories() categories = [(cat.name, cat) for cat in categories] categories.insert(0, ('', _('All Categories (%d)' % len(categories)))) sub_categories = [(cat.name, cat) for cat in sub_categories] sub_categories.insert( 0, ('', _('All Subcategories (%d)' % len(sub_categories)))) self.fields['category'].choices = categories self.fields['sub_category'].choices = sub_categories def clean(self): cleaned_data = self.cleaned_data q = self.cleaned_data.get('q', None) cat = self.cleaned_data.get('search_category', None) filter_date = self.cleaned_data.get('filter_date', None) date = self.cleaned_data.get('date', None) if cat is None or cat == "": if not (q is None or q == ""): self._errors['search_category'] = ErrorList( [_('Select a category')]) if cat in ('id', 'owner__id', 'creator__id'): try: x = int(q) except ValueError: self._errors['q'] = ErrorList([_('Must be an integer')]) if filter_date: if date is None or date == "": self._errors['date'] = ErrorList([_('Please select a date')]) return cleaned_data