27 lines
1.1 KiB
Python
27 lines
1.1 KiB
Python
from ..slugify import slugify
|
|
|
|
|
|
def row_columns_and_values(definition, form_data):
|
|
"""Traduit les données d'un formulaire généré en (colonnes, valeurs)
|
|
prêtes pour un INSERT ou un UPDATE — factorisé pour que les deux
|
|
partagent exactement la même logique de conversion de type."""
|
|
cols, values = [], []
|
|
for f in definition["fields"]:
|
|
fname = slugify(f["name"]).replace("-", "_")
|
|
if f["type"] == "relation":
|
|
col = f"{fname}_id"
|
|
raw = form_data.get(col, "")
|
|
values.append(int(raw) if raw else None)
|
|
elif f["type"] == "booleen":
|
|
values.append(1 if form_data.get(fname) == "on" else 0)
|
|
col = fname
|
|
elif f["type"] in ("nombre_entier", "nombre_decimal"):
|
|
raw = form_data.get(fname, "")
|
|
values.append((int(raw) if f["type"] == "nombre_entier" else float(raw)) if raw != "" else None)
|
|
col = fname
|
|
else:
|
|
values.append(form_data.get(fname, "") or None)
|
|
col = fname
|
|
cols.append(col)
|
|
return cols, values
|