from django import forms from .models import Availability, Ride _DT = "%Y-%m-%dT%H:%M" class RideForm(forms.ModelForm): """Fahrt anlegen. Koordinaten kommen aus den (per Karte gesetzten) Hidden-Feldern.""" class Meta: model = Ride fields = [ "fahrgast", "scheduled_at", "pickup_label", "pickup_lat", "pickup_lng", "dest_label", "dest_lat", "dest_lng", "note", ] widgets = { "scheduled_at": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT), "note": forms.Textarea(attrs={"rows": 2}), "pickup_lat": forms.HiddenInput(), "pickup_lng": forms.HiddenInput(), "dest_lat": forms.HiddenInput(), "dest_lng": forms.HiddenInput(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["scheduled_at"].input_formats = [_DT] class AvailabilityForm(forms.ModelForm): class Meta: model = Availability fields = ["start", "end"] widgets = { "start": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT), "end": forms.DateTimeInput(attrs={"type": "datetime-local"}, format=_DT), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for name in ("start", "end"): self.fields[name].input_formats = [_DT] def clean(self): cleaned = super().clean() start, end = cleaned.get("start"), cleaned.get("end") if start and end and end <= start: raise forms.ValidationError("Das Ende muss nach dem Beginn liegen.") return cleaned