radeln/rides/forms.py
steffen1971 5d967c68b5 Add Radeln ohne Alter ride-coordination demo (Django + HTMX + Leaflet)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:20:17 +02:00

57 lines
1.7 KiB
Python

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