40240-vm/core/forms.py
Flatlogic Bot 41cce00390 A
2026-06-09 23:09:44 +00:00

70 lines
2.2 KiB
Python

from django import forms
from .models import JobPosting, JobSource
class StyledModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
widget = field.widget
if isinstance(widget, forms.CheckboxInput):
widget.attrs.setdefault("class", "form-check-input")
elif isinstance(widget, forms.Select):
widget.attrs.setdefault("class", "form-select")
else:
widget.attrs.setdefault("class", "form-control")
class JobSourceForm(StyledModelForm):
class Meta:
model = JobSource
fields = ["name", "family", "url", "status", "owner", "notes"]
widgets = {
"notes": forms.Textarea(attrs={"rows": 4}),
}
help_texts = {
"url": "Paste the public job board, agency, or careers page URL.",
"owner": "Optional teammate responsible for this connector.",
}
def clean_name(self):
return self.cleaned_data["name"].strip()
class JobPostingForm(StyledModelForm):
class Meta:
model = JobPosting
fields = [
"source",
"title",
"company",
"location",
"contract_type",
"remote",
"salary",
"apply_url",
"published_at",
"description",
"is_active",
]
widgets = {
"published_at": forms.DateInput(attrs={"type": "date"}),
"description": forms.Textarea(attrs={"rows": 6}),
}
help_texts = {
"source": "Choose the connector/source that found this offer.",
"description": "Paste a concise cleaned description; the pipeline view will evolve from here.",
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["source"].queryset = JobSource.objects.order_by("family", "name")
self.fields["source"].empty_label = "Select a source"
def clean_title(self):
return self.cleaned_data["title"].strip()
def clean_company(self):
return self.cleaned_data["company"].strip()