Snippets
Purge Studio Fields (for Odoo 18)
!!! warning
This is a rather destructive script that should be used with care.
def purge_studio_field(field_name, model_name):
table_name = model_name.replace('.', '_')
# 1. Nettoyer les vues (JSONB)
env.cr.execute("""
SELECT id, arch_db::text
FROM ir_ui_view
WHERE arch_db::text LIKE %s
""", ('%'+field_name+'%',))
for view_id, arch_text in env.cr.fetchall():
import re
# Retirer toutes les références au champ
cleaned = re.sub(f'<field[^>]*name="{field_name}"[^/]*/?>', '', arch_text)
cleaned = re.sub(f'"{field_name}"', '""', cleaned)
env.cr.execute("""
UPDATE ir_ui_view
SET arch_db = %s::jsonb
WHERE id = %s
""", (cleaned, view_id))
# 2. Nettoyer les métadonnées
env.cr.execute("""
DELETE FROM ir_model_fields WHERE name = %s AND model = %s;
DELETE FROM ir_model_data WHERE name LIKE %s;
""", (field_name, model_name, '%'+field_name+'%'))
# 3. Supprimer la colonne si elle existe
try:
env.cr.execute(f"ALTER TABLE {table_name} DROP COLUMN IF EXISTS {field_name} CASCADE")
except:
pass
env.cr.commit()
print(f"✓ {field_name} purgé!")