from django import forms from .models import Recette STOP_WORDS = ['et', 'de', 'des', 'a', 'aux'] class SearchForm(forms.Form): text = forms.CharField( widget=forms.TextInput(attrs={'autofocus': True}), label="Texte", required=False ) saison = forms.ChoiceField(choices=(('all', "Toutes"),) + Recette.SAISON_CHOICES) type_princ = forms.ChoiceField( label='', choices=(('plat', 'Plat principal'), ('dessert', 'Dessert')), widget=forms.RadioSelect ) veget = forms.BooleanField(label="Végétarien", required=False) def search(self): if self.is_valid(): qs = Recette.objects.filter(is_dessert=self.cleaned_data['type_princ'] == 'dessert') if self.cleaned_data['veget']: qs = qs.filter(is_veget=True) if self.cleaned_data['text']: terms = [t for t in self.cleaned_data['text'].split() if t not in STOP_WORDS] for term in terms: qs = qs.filter(nom__unaccent__icontains=term) if self.cleaned_data['saison'] != 'all': qs = qs.filter(saison__contains=[self.cleaned_data['saison']]) return qs else: return Recette.objects.none()