TrafoKing/apps/participants/forms.py
2025-05-13 01:13:40 +02:00

44 lines
1.5 KiB
Python

# forms.py
from django import forms
from django.utils.safestring import mark_safe
from .models import Participant
import re
from django.core.exceptions import ValidationError
_DECIMAL_RE = re.compile(r"[^\d,\.]")
class ParticipantForm(forms.ModelForm):
class Meta:
model = Participant
fields = [
"group_name",
"R_diff",
"L_diff",
"Ph_diff",
"Pcu_diff",
"s_vol_over_eta",
]
widgets = {
f: forms.NumberInput(attrs={"step": "0.1", "class": "input"})
for f in fields if f != "group_name"
}
widgets["group_name"] = forms.TextInput(attrs={"class": "input"})
labels = {
"group_name": "Nombre del grupo",
"R_diff": mark_safe("R<sub>diff</sub>"),
"L_diff": mark_safe("L<sub>diff</sub>"),
"Ph_diff": mark_safe("P<sub>h, diff</sub>"),
"Pcu_diff": mark_safe("P<sub>cu, diff</sub>"),
"s_vol_over_eta": mark_safe("S/Vol·η"),
}
def clean_s_vol_over_eta(self):
raw = self.data.get("s_vol_over_eta", "")
raw = _DECIMAL_RE.sub("", raw) # quita letras o espacios
raw = raw.replace(",", ".") # coma → punto
try:
value = float(raw)
except ValueError:
raise ValidationError("Introduce un número válido (ej. 12.3)")
if value <= 0:
raise ValidationError("Debe ser mayor que 0")
return value