2018-05-26 16:01:04 +02:00
|
|
|
from django import forms
|
|
|
|
|
2018-05-26 17:59:13 +02:00
|
|
|
from .models import Recette
|
|
|
|
|
2018-11-24 11:45:42 +01:00
|
|
|
STOP_WORDS = ['et', 'de', 'des', 'a', 'aux']
|
|
|
|
|
2018-05-26 16:01:04 +02:00
|
|
|
|
|
|
|
class SearchForm(forms.Form):
|
2018-05-27 11:22:55 +02:00
|
|
|
text = forms.CharField(
|
|
|
|
widget=forms.TextInput(attrs={'autofocus': True}),
|
2018-10-14 18:15:25 +02:00
|
|
|
label="Texte", required=False
|
2018-05-27 11:22:55 +02:00
|
|
|
)
|
2018-05-26 17:59:13 +02:00
|
|
|
saison = forms.ChoiceField(choices=(('all', "Toutes"),) + Recette.SAISON_CHOICES)
|
2021-07-03 18:54:58 +02:00
|
|
|
type_princ = forms.ChoiceField(
|
|
|
|
label='',
|
|
|
|
choices=(('plat', 'Plat principal'), ('dessert', 'Dessert')),
|
|
|
|
widget=forms.RadioSelect
|
|
|
|
)
|
2018-05-27 11:22:18 +02:00
|
|
|
veget = forms.BooleanField(label="Végétarien", required=False)
|
2018-05-26 17:59:13 +02:00
|
|
|
|
|
|
|
def search(self):
|
|
|
|
if self.is_valid():
|
2021-07-03 18:54:58 +02:00
|
|
|
qs = Recette.objects.filter(is_dessert=self.cleaned_data['type_princ'] == 'dessert')
|
2018-05-27 11:22:18 +02:00
|
|
|
if self.cleaned_data['veget']:
|
|
|
|
qs = qs.filter(is_veget=True)
|
2018-05-26 17:59:13 +02:00
|
|
|
if self.cleaned_data['text']:
|
2018-11-24 11:45:42 +01:00
|
|
|
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)
|
2018-05-26 17:59:13 +02:00
|
|
|
if self.cleaned_data['saison'] != 'all':
|
|
|
|
qs = qs.filter(saison__contains=[self.cleaned_data['saison']])
|
|
|
|
return qs
|
|
|
|
else:
|
|
|
|
return Recette.objects.none()
|