Suite de la demande : le panneau "Modifier un objet" (crayon ✏️, onglet Objets du tableau de bord) a maintenant 2 sous-onglets — "Champs" (déjà en place) et "Données", qui reprend data_list.html + data_form.html (retirés) : ajouter une entrée (une ligne compacte avec le bon type de champ par colonne — texte/nombre/case à cocher/date/relation, comme l'ancien formulaire), modifier/supprimer une entrée existante (tableau dense, cellules éditables en ligne, même principe que "Champs existants"). Sous-onglets scopés au panneau de LEUR objet (switchObjectPanelTab(), classes .objectPanelTabs/.objectPanelTabPanel distinctes de .builderTabs/ .builderTabPanel) — plusieurs objets ont chacun leurs propres sous-onglets indépendants sur la même page, sans jamais interférer avec les onglets du tableau de bord lui-même. routes/games/game_dashboard.py fournit maintenant, par objet : ses lignes (rows_by_definition), les libellés lisibles de ses champs relation (relation_labels_by_definition, pour l'affichage) et leurs options (relation_options_by_definition, pour les <select>), ainsi que referenced_by_definition (avertissement permanent si un autre objet a une relation vers celui-ci — repris de l'ancien object_view.py, affiché maintenant en continu plutôt qu'après une tentative de suppression échouée). data_form.py (partagé par data_new/data_edit), data_delete.py et object_delete.py redirigent maintenant vers le tableau de bord (?edit=<id>&subtab=data, +?blocked_row=<id> si la suppression d'une entrée est bloquée par une relation) au lieu de object_view/object_edit. Piège évité : de nombreux tests déduisent l'id d'un objet fraîchement créé du DERNIER SEGMENT du chemin dans le header Location d'une redirection (.../objects/<id>) — rediriger object_new directement vers le tableau de bord (chemin sans id) cassait donc 33 tests d'un coup. Fix : object_view.py reste en place, mais seulement comme redirecteur (plus de page rendue) — object_new redirige toujours vers lui (chemin qui se termine par l'id, donc les tests continuent de fonctionner), qui redirige à son tour vers le tableau de bord. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
25 lines
980 B
Python
25 lines
980 B
Python
from flask import request, redirect, url_for, abort
|
|
|
|
import db
|
|
|
|
|
|
def _data_form(slug, definition_id, row):
|
|
"""Ajouter/modifier une entrée se fait désormais depuis l'onglet
|
|
"Données" du panneau déplaçable de son objet (voir game_dashboard.html,
|
|
ouvert par le crayon ✏️ de l'onglet Objets) plutôt qu'une page dédiée
|
|
(data_form.html, retirée) — cette fonction ne fait donc plus que
|
|
traiter la soumission de ce formulaire. Un GET direct redirige vers le
|
|
tableau de bord, en rouvrant le panneau de cet objet sur son onglet
|
|
Données."""
|
|
definition = db.get_definition(slug, definition_id)
|
|
if not definition:
|
|
abort(404)
|
|
|
|
if request.method == "POST":
|
|
if row is None:
|
|
db.insert_row(slug, definition, request.form)
|
|
else:
|
|
db.update_row(slug, definition, row["id"], request.form)
|
|
|
|
return redirect(url_for("game_dashboard", slug=slug, tab="objects", edit=definition_id, subtab="data"))
|