GeotrekCE / Geotrek-admin

Paths management for National Parks and Tourism organizations
https://geotrek.fr
BSD 2-Clause "Simplified" License
130 stars 76 forks source link

Limiter le nombre de character uniquement pour certains champs #3844

Open TheoLechemia opened 9 months ago

TheoLechemia commented 9 months ago

Bonjour, Pour les besoins d'évolution du module "touristic event" (https://github.com/GeotrekCE/Geotrek-admin/issues/3587), on aurait besoin de limiter le nombre de caractères de certains champs (notamment dû à des contraintes d'autres outils qui moissonnent nos données - Apidae) Le paramètre https://github.com/GeotrekCE/Geotrek-admin/issues/2901#issuecomment-1237827398 permet de limiter ce nombre globalement. On proposerait de le faire évoluer pour qu'il puisse prendre une paramètre le model et le champs auquel il s'applique. ça pourrait donner ça :

MAPENTITY_CONFIG['MAX_CHARACTERS'] = {
   'trek' : [{'field': 'mon_champs', 'value': 50}, {'field': 'mon_champs_bis', 'value': 70}],
   'touristic_event' : [{'field': 'mon_champs', 'value': 50}, {'field': 'mon_champs_bid', 'value': 70}]
}

Qu'est ce que vous en pensez ?

camillemonchicourt commented 9 months ago

Oui cela me semble bien. Le fait de pouvoir limiter la longueur de certains champs est un besoin partagé et souvent remonté, mais la solution actuellement mise en place avec un seul paramètre globale est inutilisable car elle s'applique à tous les champs texte de Geotrek-admin dans tous les modules.

AudreyRemy commented 9 months ago

Bonjour Je ne suis pas experte pour donner mon avis mais en amont est-il possible de vérifier qu'actuellement les champs déjà saisis ne dépassent pas le nombre de caractères que vous allez autoriser ?

marcantoinedupre commented 9 months ago

Ça a l'air bien. Je pense que ce serait pertinent de faire un petit inventaire de comment les modèles et leurs attributs sont désignés dans les autres paramètres configurables (j'ai COLUMNS_LIST en tête). Dans l'idée de faire une convention de nommage cohérente.

TheoLechemia commented 9 months ago

Ok je vais regarder. On discutait également du fait qu'actuellement la limite est seulement indicative et non bloquante. La vérification est fait côté frontend avec l'affichage d'un petit bandeau rouge lorsque la limite est dépassé. On se demandait s'il était judicieux de renforcer cette vérification côté backend et de bloquer lorsque la limite est dépassée. Je vais dans un premier temps proposer une évolution uniquement en faisant évoluer le mécanisme existant côté frontend

camillemonchicourt commented 5 months ago

La version 2.102.2 de Geotrek-admin passe à Django-Mapentity 8.7.0. Celle-ci inclut les évolutions de le configuration du nombre maximum de caractères qui peut être définie champs par champs : https://github.com/makinacorpus/django-mapentity/pull/282

Le nouveau paramètre MAX_CHARACTERS_BY_FIELD est désormais à utiliser et privilégier en remplacement du paramètre MAX_CHARACTERS (déprécié).

Il est défini par module, champs par champs (et langue par langue). Exemple :

MAPENTITY_CONFIG['MAX_CHARACTERS_BY_FIELD'] = { 
        "tourism_touristicevent": [{'field': 'description_teaser_fr', 'value': 50}, {'field': 'accessibility_fr', 'value': 25}],
        "trekking_trek": [{'field': 'description_teaser_fr', 'value': 150}],
    }

Cela ne bloque pas la saisie au-delà du nombre de caractères défini, mais cela l'affiche dans le texte d'aide du champs, au niveau de son compteur et passe le champs en rouge quand on dépasse le nombre défini :

image

camillemonchicourt commented 5 months ago

Il me semble que cette fonctionnalité est OK, mais qu'il ne resterait plus qu'à remplacer le paramètre actuel par défaut MAX_CHARACTERS (https://github.com/GeotrekCE/Geotrek-admin/blob/master/geotrek/settings/base.py#L421) désormais déprécié par le nouveau MAX_CHARACTERS_BY_FIELD dans le fichier base.py