from django import forms from django.core.exceptions import ValidationError from django.contrib.admin.widgets import FilteredSelectMultiple import re from .models import ( Educative, Skill, Routine, RoutineSkill, # Passe, ) class SkillForm(forms.ModelForm): class Meta: model = Skill fields = ("informations",) widgets = { "informations": forms.Textarea( attrs={ "class": "form-control", "placeholder": "Informations about the skill : attention point, methodology, biomecanics, …", # pylint: disable=line-too-long } ), } class CombinationForm(forms.ModelForm): class Meta: model = Routine fields = ( "long_label", "short_label", "difficulty", "level", "is_active", "is_routine", "is_competitive", "informations", ) widgets = { "long_label": forms.TextInput( attrs={"class": "form-control", "placeholder": "Routine's long name"} ), "short_label": forms.TextInput( attrs={"class": "form-control", "placeholder": "Routine's short name"} ), "informations": forms.Textarea( attrs={ "class": "form-control", "placeholder": "Informations about the psychological state of mind : context (why, where, …), possible consequencies, …", # pylint: disable=line-too-long } ), "difficulty": forms.HiddenInput(), "level": forms.HiddenInput(), "is_active": forms.HiddenInput(), } class CombinationSkillForm(forms.ModelForm): class Meta: model = RoutineSkill fields = ( "routine", "skill", "rank", ) widgets = { "routine": forms.HiddenInput(), "skill": forms.HiddenInput(), "rank": forms.NumberInput(), } # class PasseForm(forms.ModelForm): # educatives = forms.ModelMultipleChoiceField( # required=False, # queryset=Educative.objects.all(), # widget=FilteredSelectMultiple("Educatives", is_stacked=False), # # widget=customFilteredSelectMultiple(verbose_name='test2',is_stacked=False) # ) # class Media: # css = { # "all": ["admin/css/widgets.css"], # } # # Adding this javascript is crucial # js = ["/admin/jsi18n/"] # class Meta: # model = Passe # fields = ("label", "regexp", "educatives", "informations") # widgets = { # "label": forms.TextInput( # attrs={ # "class": "form-control", # "placeholder": "Label (not mandatory)", # "maxlength": 30, # } # ), # "regexp": forms.TextInput( # attrs={"class": "form-control", "placeholder": "[2-8]"} # ), # "informations": forms.Textarea( # attrs={ # "class": "form-control", # "placeholder": "Informations about the passe…", # pylint: disable=line-too-long # } # ), # } # def clean_regexp(self): # """Vérifie que la regexp entrée par l'utilisateur est valide.""" # regexp = self.cleaned_data["regexp"] # if not Passe.is_valid_regexp(regexp): # raise ValidationError("Entered regexp not valid.") # return regexp # def clean(self): # """Vérifie le contenu des champs `educatives` par rapport à la valeur de `regexp`. Si # `regexp` est définie par : # - valeurs de ROUTINE_TYPE_CHOICE il faut que Educatives soit VIDE # - avec [x-y] # - [x-y] " Educatives soit NON VIDE # - WC " il y ait 2+ Educatives # - x| " il y ait 1! Educatives # """ # cleaned_data = super().clean() # regexp = ["regexp"] # if regexp is not None: # arguments = regexp.split(" ") # educatives = cleaned_data["educatives"] # if Passe.is_valid_routine_type(arguments[0]) and educatives is not None: # raise ValidationError( # "Educatives must be empty with the entered Regexp." # ) # if Passe.is_valid_subset(arguments[0]) and educatives is None: # raise ValidationError( # "Educatives can't be empty with the entered Regexp." # ) # if re.match(r"[1-9]+\|", arguments[0]) and len(educatives) != 1: # raise ValidationError( # "One and only one Educatives allowed with the entered Regexp." # ) # if arguments[0] == "WC" and (educatives is None or len(educatives) < 2): # raise ValidationError( # "At least two Educatives with the entered Regexp." # ) # return cleaned_data