Supprimer des champs personnalisés par code
Supprimer des champs personnalisés par code
Lorsque vous développez une application personnalisée sur Dokos, il est courant d'ajouter des champs personnalisés via des fichiers de configuration (custom_fields). La fonction delete_custom_fields supprime ces champs par code, utile lors de migrations, de mises à jour de modules ou de nettoyages de données.
La fonction delete_custom_fields
La fonction delete_custom_fields est disponible dans le module frappe.custom.doctype.custom_field.custom_field. Elle permet de supprimer un ou plusieurs champs personnalisés associés à des types de formulaires spécifiques.
Utilisation réservée aux développeurs
Cette fonction est destinée aux développeurs qui construisent ou maintiennent des applications sur Dodock/Dokos. Elle ne s'utilise pas depuis l'interface utilisateur.
Syntaxe
from frappe.custom.doctype.custom_field.custom_field import delete_custom_fields
delete_custom_fields(custom_fields, bypass_hooks=False)
Paramètres
| Paramètre | Type | Description |
|---|---|---|
custom_fields | dict | Dictionnaire qui associe un nom de DocType à une liste de champs. Chaque champ est un nom ("custom_a") ou un dictionnaire avec la clé fieldname. |
bypass_hooks | bool | False par défaut : chaque champ personnalisé est supprimé comme un document, avec ses événements (on_trash…). True : suppression directe en base, plus rapide, sans événements. |
Exemples d'utilisation
Supprimer un champ personnalisé sur un seul DocType
from frappe.custom.doctype.custom_field.custom_field import delete_custom_fields
delete_custom_fields({
"Customer": [
{"fieldname": "custom_loyalty_tier"}
]
})
Dans cet exemple, le champ custom_loyalty_tier est supprimé du DocType Customer. Si le champ n'existe pas, la fonction l'ignore sans erreur.
Supprimer plusieurs champs sur plusieurs DocTypes
from frappe.custom.doctype.custom_field.custom_field import delete_custom_fields
delete_custom_fields({
"Customer": [
{"fieldname": "custom_loyalty_tier"},
{"fieldname": "custom_account_manager"}
],
"Sales Invoice": [
{"fieldname": "custom_campaign_code"}
]
})
Supprimer rapidement sans événements
from frappe.custom.doctype.custom_field.custom_field import delete_custom_fields
delete_custom_fields({"Supplier": ["custom_supplier_category"]}, bypass_hooks=True)
Avec bypass_hooks=True, Dokos supprime les lignes de champ personnalisé directement en base, puis vide le cache du DocType. Les événements du champ personnalisé ne s'exécutent pas.
Cas d'usage typiques
- Migration de module : lors de la refonte d'un module, supprimer les anciens champs devenus obsolètes sans intervention manuelle en base.
- Patch de mise à jour : dans un fichier
patches.txt, appelerdelete_custom_fieldspour nettoyer les résidus d'une ancienne version. - Tests automatisés : créer puis supprimer des champs personnalisés dans des tests pour garantir la reproductibilité.
Comportement technique
- Après suppression, le cache Frappe est automatiquement vidé pour que les modifications soient immédiatement prises en compte.
- Par défaut, chaque champ est supprimé comme un document, avec ses événements. Passez
bypass_hooks=Truepour une suppression directe. - Un champ absent est ignoré : la fonction ne lève pas d'erreur.
- La suppression est définitive : les données éventuellement stockées dans ces champs sont perdues si elles ne sont pas sauvegardées ailleurs.