GeotrekCE / Geotrek-admin

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

Set empty text value as default for translation fields #4192

Open marcantoinedupre opened 2 weeks ago

marcantoinedupre commented 2 weeks ago

On utilise le package django-modeltranslation pour marquer certains champs textes comme traduits. Les champs traduits reçoivent automatiquement autant de champs traductions (translation fields) qu'il y a de langues configurées sur l'instance.

Par exemple un champ description donnerait des champs traductions description_fr, description_en, description_es, etc. Ces sous-champs sont accessibles via les attributs correspondants sur une instance de modèle.

Notre problème est que les champs traductions de django-modeltranslation ne conserve pas le paramètrage null de leur champ d'origine : ils sont toujours nullable.

Dans le cas où l'objet est créé ou modifié via un formulaire c'est OK : les champs traductions de type texte reçoivent bien un texte vide en valeur par défaut.

Ce n'est pas le cas si l'objet est créé par programmation, en particulier s'il est créé/modifié dans un processus d'import. Dans ce cas tous les champs traductions ne recevant pas de valeur explicite sont à None => NULL dans la base de données.

Ça pose le problème que 2 valeurs cohabitent pour la valeur vide de ces champs textes. Ces 2 valeurs possibles sont exposées dans l'API publique, ce qui complexifie le travail des développeurs qui l'utilisent.

Ce ticket sur django-modeltranslation fait référence à cette question : https://github.com/deschler/django-modeltranslation/issues/144

Comportement souhaité : les champs traductions utilisent une valeur texte vide comme valeur par défaut.

Pistes :