1
votes

Odoo 12: Many2one ondelete message?

Est-il possible de modifier (éditer) le message par défaut de suppression dans le champ Many2one?

Mon champ est:

"Odoo Server Error - Greška kod provjere

The operation cannot be completed, probably due to the following:
- deletion: you may be trying to delete a record while other records still reference it
- creation/update: a mandatory field is not correctly set

[objekt s referencom: pgp.organizational.classifications - pgp.organizational.classifications] "

Le message par défaut est comme celui-ci, mais j'ai gagné ' t pour ajouter mon message:

parent_id = fields.Many2one("pgp.organizational.classifications", string="Parent classification", select=True, ondelete='restrict')


0 commentaires

3 Réponses :


0
votes

Vous ne pouvez pas le modifier dans la déclaration du champ Many2one.

Le code qui génère ce message est là: https://github.com/odoo/odoo/blob/12.0/odoo/service/model.py#L120-L154

Cela semble difficile à surcharger


0 commentaires

0
votes

La restriction et les suppressions en cascade sont les deux options les plus courantes. RESTRICT empêche la suppression d'une ligne référencée. NO ACTION signifie que si des lignes de référence existent encore lorsque la contrainte est vérifiée, une erreur est générée; c'est le comportement par défaut si vous ne spécifiez rien. (La différence essentielle entre ces deux choix est que NO ACTION permet de reporter le contrôle à un stade ultérieur de la transaction, contrairement à RESTRICT.) CASCADE spécifie que lorsqu'une ligne référencée est supprimée, la ou les lignes qui la référencent doivent être automatiquement supprimées ainsi que. Il existe deux autres options: SET NULL et SET DEFAULT. Celles-ci provoquent la définition des colonnes de référence sur des valeurs nulles ou par défaut, respectivement, lorsque la ligne référencée est supprimée. Notez que ceux-ci ne vous dispensent d'observer aucune contrainte. Par exemple, si une action spécifie SET DEFAULT mais que la valeur par défaut ne satisfait pas la clé étrangère, l'opération échouera.


0 commentaires

0
votes

Je l'ai résolu en surchargeant la méthode de dissociation. Voici le code si cela aide quelqu'un:

> @api.multi
>     def unlink(self):
>         for field in self:
>             if field.parent_id:
>                 raise UserError(_('It is not possible to delete a record that is already used in transactions!'))
>         return super(YourClass, self).unlink()


0 commentaires