From 754d26bac96e9d5859ecfd5932fffebdde977035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Lech=C3=A9mia?= Date: Mon, 5 Aug 2024 10:49:06 +0200 Subject: [PATCH] fix database insert when attributes are empty (#467) + doc permissions --- apptax/admin/admin_view.py | 30 ++++++++++++++++++------------ apptax/taxonomie/models.py | 2 +- docs/changelog.md | 3 ++- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/apptax/admin/admin_view.py b/apptax/admin/admin_view.py index abc7d47d5..b175060cd 100644 --- a/apptax/admin/admin_view.py +++ b/apptax/admin/admin_view.py @@ -424,7 +424,6 @@ def edit_view(self): if taxon_name.cd_nom == taxon_name.cd_ref: theme_attributs_def = self._get_theme_attributes(taxon_name) attributes_val = self._get_attributes_value(taxon_name, theme_attributs_def) - self._template_args["theme_attributs_def"] = theme_attributs_def self._template_args["attributes_val"] = attributes_val if request.method == "POST": @@ -432,17 +431,25 @@ def edit_view(self): if request.form.getlist(f) and f.startswith("attr."): id_attr = f.split(".")[1] value = "&".join(request.form.getlist(f)) - try: - model = ( - db.session.query(CorTaxonAttribut) - .filter_by(cd_ref=taxon_name.cd_ref) - .filter_by(id_attribut=id_attr) - .one() + query = ( + db.select(CorTaxonAttribut) + .filter_by(cd_ref=taxon_name.cd_ref) + .filter_by(id_attribut=id_attr) + ) + model = db.session.scalars(query).one_or_none() + if model: + if value == "": + db.session.delete(model) + else: + model.valeur_attribut = value + db.session.add(model) + elif value != "": + model = CorTaxonAttribut( + cd_ref=taxon_name.cd_ref, + id_attribut=id_attr, + valeur_attribut=value, ) - except Exception: - model = CorTaxonAttribut(cd_ref=taxon_name.cd_ref, id_attribut=id_attr) - model.valeur_attribut = value - db.session.add(model) + db.session.add(model) db.session.commit() self._template_args["url_cancel"] = request.referrer or url_for("taxons.index_view") @@ -602,6 +609,5 @@ def on_model_change(self, form, model, is_created): ("radio", "radio"), ("textarea", "textarea"), ("text", "text"), - ("phenology", "phenology"), ], } diff --git a/apptax/taxonomie/models.py b/apptax/taxonomie/models.py index be4689244..1fdab9acb 100644 --- a/apptax/taxonomie/models.py +++ b/apptax/taxonomie/models.py @@ -86,7 +86,7 @@ class BibAttributs(db.Model): obligatoire = db.Column(db.BOOLEAN, nullable=True, server_default=FetchedValue()) desc_attribut = db.Column(db.Text) type_attribut = db.Column(db.Unicode) - type_widget = db.Column(db.Unicode) + type_widget = db.Column(db.Unicode, nullable=False) v_regne = db.Column( db.Unicode, ForeignKey(VMRegne.regne), diff --git a/docs/changelog.md b/docs/changelog.md index 9c77f84ba..30318d622 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -3,7 +3,8 @@ **⚠️ Notes de version** - Les données de la table "bib_nom" on été sauvegardées dans une liste nommée "Save bib_nom". Le champs "nom_français" ainsi que "commentaire" de cette table ne sont pas conservés dans la version 2.0.0 (ils n'étaient plus utilisés dans les recherche de taxons depuis plusieurs versions). -- Changement dans les permissions : seuls les profile 2 et 6 sont utilisé. Il faut un profik 2 pour ajouter des attributs / medias et ajouter des taxons à des listes. Il faut un profik 6 pour pouvoir créer des listes / thêmes / type d'attributs. + +- Changement dans les permissions : seuls les profils 2 et 6 sont utilisés. Il faut un profil 2 pour ajouter des attributs / medias et ajouter des taxons à des listes. Il faut un profil 6 pour pouvoir créer des listes / thêmes / type d'attributs. - Le paramètre `UPLOAD_FOLDER` devient `MEDIA_FOLDER`. Veillez à le remplacer dans le fichier `config.py`. Si vous utilisez TaxHub avec GeoNature, ce paramètre existe déjà et est par défaut à `/backend/medias`.