from __future__ import annotations from django import forms from .models import SearchProfile class SearchProfileForm(forms.ModelForm): desired_titles_text = forms.CharField( label="Gewenste functietitels", required=False, widget=forms.Textarea(attrs={"rows": 4, "placeholder": "Eén titel per regel"}), ) excluded_titles_text = forms.CharField( label="Uitgesloten titelwoorden", required=False, widget=forms.Textarea(attrs={"rows": 3, "placeholder": "Eén term per regel"}), ) desired_skills_text = forms.CharField( label="Gewenste skills", required=False, widget=forms.Textarea(attrs={"rows": 4, "placeholder": "Eén skill per regel"}), ) excluded_skills_text = forms.CharField( label="Uitgesloten skills", required=False, widget=forms.Textarea(attrs={"rows": 3, "placeholder": "Eén skill per regel"}), ) class Meta: model = SearchProfile fields = [ "name", "is_active", "home_postal_code", "home_municipality", "home_latitude", "home_longitude", "max_distance_km", "allowed_employment_types", "preferred_workplace", "preferred_regions", "excluded_regions", "recommendation_threshold", "top_match_threshold", "digest_time", "learning_enabled", ] widgets = { "allowed_employment_types": forms.TextInput( attrs={"placeholder": '["full_time", "part_time"]'} ), "preferred_workplace": forms.TextInput(attrs={"placeholder": '["hybrid", "on_site"]'}), "preferred_regions": forms.TextInput(attrs={"placeholder": '["Limburg"]'}), "excluded_regions": forms.TextInput(attrs={"placeholder": '["Brussel"]'}), "digest_time": forms.TimeInput(attrs={"type": "time"}), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.instance and self.instance.pk: self.fields["desired_titles_text"].initial = "\n".join(self.instance.desired_titles) self.fields["excluded_titles_text"].initial = "\n".join(self.instance.excluded_titles) self.fields["desired_skills_text"].initial = "\n".join(self.instance.desired_skills) self.fields["excluded_skills_text"].initial = "\n".join(self.instance.excluded_skills) @staticmethod def _lines(value: str) -> list[str]: return [line.strip() for line in value.splitlines() if line.strip()] def save(self, commit=True): instance = super().save(commit=False) instance.desired_titles = self._lines(self.cleaned_data["desired_titles_text"]) instance.excluded_titles = self._lines(self.cleaned_data["excluded_titles_text"]) instance.desired_skills = self._lines(self.cleaned_data["desired_skills_text"]) instance.excluded_skills = self._lines(self.cleaned_data["excluded_skills_text"]) if commit: instance.save() self.save_m2m() return instance