odoo-lint odoo-lint odoo-lint
/
  • Why odoo-lint?
  • Usage
  • Configuration
  • CI integration
  • Editors
  • AI coding agents
  • Translations not showing up?
  • Upgrades
  • Module READMEs
  • Benchmarks
  • Rules
    • manifest-required-author (C8101)
    • manifest-required-key (C8102)
    • manifest-deprecated-key (C8103)
    • license-allowed (C8105)
    • manifest-version-format (C8106)
    • translation-required (C8107)
    • method-compute (C8108)
    • method-search (C8109)
    • method-inverse (C8110)
    • development-status-allowed (C8111)
    • missing-readme (C8112)
    • no-wizard-in-models (C8113)
    • category-allowed (C8114)
    • missing-odoo-file (C8115)
    • manifest-superfluous-key (C8116)
    • category-allowed-app (C8117)
    • missing-odoo-file-app (C8118)
    • manifest-required-key-app (C8119)
    • manifest-summary-multiline (C8120)
    • syntax-error (E0001)
    • manifest-author-string (E8101)
    • invalid-commit (E8102)
    • sql-injection (E8103)
    • manifest-maintainers-list (E8104)
    • external-request-timeout (E8106)
    • test-folder-imported (E8130)
    • no-write-in-compute (E8135)
    • no-raise-unlink (E8140)
    • manifest-behind-migrations (E8145)
    • deprecated-name-get (E8146)
    • inheritable-method-string (E8147)
    • inheritable-method-lambda (E8148)
    • deprecated-inselect-operator (E8149)
    • translation-injection (E8151)
    • translation-unsupported-format (E8300)
    • translation-format-truncated (E8301)
    • translation-too-many-args (E8305)
    • translation-too-few-args (E8306)
    • resource-not-exist (F8101)
    • manifest-syntax-error (MOD001)
    • file-not-used (MOD002)
    • csv-syntax-error (MOD003)
    • csv-duplicate-record-id (MOD004)
    • prefer-readme-rst (MOD005)
    • weblate-component-too-long (MOD006)
    • unused-logger (MOD007)
    • use-header-comments (MOD008)
    • field-string-redundant (MOD009)
    • missing-depends (ODOO001)
    • module-unwanted-file (ODOO002)
    • module-large-file (ODOO003)
    • view-field-not-found (ODOO004)
    • xml-id-not-found (ODOO005)
    • model-not-found (ODOO006)
    • python-field-not-found (ODOO007)
    • po-syntax-error (PO001)
    • po-requires-module (PO002)
    • po-python-parse-printf (PO003)
    • po-python-parse-format (PO004)
    • po-duplicate-message-definition (PO005)
    • po-duplicate-model-definition (PO006)
    • po-pretty-format (PO007)
    • po-not-in-pot (PO101)
    • po-unknown-occurrence (PO102)
    • po-file-name (PO103)
    • po-fuzzy (PO104)
    • odoo-exception-warning (R8101)
    • consider-merging-classes-inherited (R8180)
    • invalid-email (R8181)
    • upgrade-extension-view-groups (U1601)
    • upgrade-html-field-type (U1602)
    • upgrade-assets-qweb (U1603)
    • upgrade-removed-asset-bundles-16 (U1604)
    • upgrade-manifest-qweb (U1605)
    • upgrade-ir-translation (U1606)
    • upgrade-request-api (U1607)
    • upgrade-binary-content (U1608)
    • upgrade-search-args (U1609)
    • upgrade-osv-query (U1610)
    • upgrade-fields-view-get (U1611)
    • upgrade-attrs-states (U1701)
    • upgrade-list-column-invisible (U1702)
    • upgrade-report-act-window-tags (U1703)
    • upgrade-calendar-quick-add (U1704)
    • upgrade-view-active-id (U1705)
    • upgrade-server-action-lines (U1706)
    • upgrade-view-field-parent (U1707)
    • upgrade-view-qweb-directives (U1708)
    • upgrade-name-get (U1709)
    • upgrade-name-search-signature (U1710)
    • upgrade-search-count-true (U1711)
    • upgrade-removed-recordset-methods (U1712)
    • upgrade-field-states (U1713)
    • upgrade-savepoint-case (U1714)
    • upgrade-old-exceptions (U1715)
    • upgrade-onchange-domain (U1716)
    • upgrade-norecompute (U1717)
    • upgrade-ir-default-get (U1718)
    • upgrade-private-read-group (U1719)
    • upgrade-openerp-manifest (U1720)
    • upgrade-removed-asset-bundles (U1721)
    • upgrade-tree-view (U1801)
    • upgrade-view-mode-tree (U1802)
    • upgrade-tree-reference (U1803)
    • upgrade-cron-numbercall (U1804)
    • upgrade-default-period (U1805)
    • upgrade-kanban-box (U1806)
    • upgrade-group-operator (U1807)
    • upgrade-user-has-groups (U1808)
    • upgrade-python-tree-view (U1809)
    • upgrade-name-search-override (U1810)
    • upgrade-env-shortcuts (U1901)
    • upgrade-sql-constraints (U1902)
    • upgrade-api-model-create (U1903)
    • upgrade-api-returns (U1904)
    • upgrade-read-group-override (U1905)
    • upgrade-route-json (U1906)
    • upgrade-python-groups-id (U1907)
    • upgrade-osv-expression (U1908)
    • upgrade-auto-join (U1909)
    • upgrade-name-search-args (U1910)
    • upgrade-clear-caches (U1911)
    • upgrade-removed-helpers (U1912)
    • upgrade-sequence-get (U1913)
    • upgrade-domain-operators (U1914)
    • upgrade-models-newid (U1915)
    • upgrade-groups-id (U1916)
    • upgrade-search-group-attributes (U1917)
    • upgrade-groups-users (U1918)
    • upgrade-manifest-old-data-keys (U1919)
    • upgrade-t-call-element (U1920)
    • upgrade-partner-mobile-title (U1921)
    • upgrade-ir-model-access-csv (U2001)
    • upgrade-ir-access-records (U2002)
    • upgrade-t-esc-t-raw (U2003)
    • upgrade-t-call-body (U2004)
    • upgrade-t-call-options (U2005)
    • upgrade-base64-file-field (U2006)
    • upgrade-attachment-datas-xml (U2007)
    • upgrade-report-file (U2008)
    • upgrade-font-awesome (U2009)
    • upgrade-filter-date-range (U2010)
    • upgrade-calendar-date-delay (U2011)
    • upgrade-bank-account-fields (U2012)
    • upgrade-partner-company-fields (U2013)
    • upgrade-widget-renames (U2014)
    • upgrade-jquery-bundle (U2015)
    • upgrade-manifest-init-xml (U2016)
    • upgrade-config-parameter (U2017)
    • upgrade-attachment-datas (U2018)
    • upgrade-ir-access-models (U2019)
    • upgrade-removed-access-methods (U2020)
    • upgrade-read-group-signature (U2021)
    • upgrade-registry-clear-cache (U2022)
    • upgrade-ormcache-import (U2023)
    • upgrade-http-imports (U2024)
    • upgrade-tools-imports (U2025)
    • upgrade-bank-account-fields-python (U2026)
    • upgrade-partner-company-fields-python (U2027)
    • upgrade-self-writeable-fields (U2028)
    • upgrade-inherit-read (U2029)
    • upgrade-test-classes (U2030)
    • translation-field (W8103)
    • attribute-deprecated (W8105)
    • method-required-super (W8106)
    • prohibited-method-override (W8107)
    • missing-return (W8110)
    • renamed-field-parameter (W8111)
    • attribute-string-redundant (W8113)
    • website-manifest-key-not-valid-uri (W8114)
    • translation-contains-variable (W8115)
    • print-used (W8116)
    • translation-positional-used (W8120)
    • context-overridden (W8121)
    • manifest-data-duplicated (W8125)
    • except-pass (W8138)
    • odoo-addons-relative-import (W8150)
    • bad-builtin-groupby (W8155)
    • deprecated-odoo-model-method (W8160)
    • prefer-env-translation (W8161)
    • manifest-external-assets (W8162)
    • no-search-all (W8163)
    • super-method-mismatch (W8164)
    • deprecated-self-cr (W8165)
    • use-vim-comment (W8202)
    • translation-not-lazy (W8301)
    • translation-format-interpolation (W8302)
    • translation-fstring-interpolation (W8303)
    • xml-syntax-error (XML001)
    • xml-header-missing (XML002)
    • xml-header-wrong (XML003)
    • xml-record-missing-id (XML004)
    • xml-duplicate-record-id (XML005)
    • xml-duplicate-fields (XML006)
    • xml-duplicate-template-id (XML007)
    • xml-redundant-module-name (XML008)
    • xml-tag-position (XML009)
    • xml-deprecated-data-node (XML010)
    • xml-deprecated-openerp-node (XML011)
    • xml-deprecated-qweb-directive (XML012)
    • xml-deprecated-qweb-directive-15 (XML013)
    • xml-deprecated-tree-attribute (XML014)
    • xml-deprecated-oe-chatter (XML015)
    • xml-deprecated-res-groups-category-id (XML016)
    • xml-view-dangerous-replace-low-priority (XML017)
    • xml-dangerous-qweb-replace-low-priority (XML018)
    • xml-create-user-wo-reset-password (XML019)
    • xml-not-valid-char-link (XML020)
    • xml-xpath-translatable-item (XML021)
    • xml-oe-structure-missing-id (XML022)
    • xml-field-bool-without-eval (XML023)
    • xml-field-numeric-without-eval (XML024)
    • xml-bootstrap4-class (XML101)
    • xml-bootstrap4-removed-class (XML102)
  • OCA parity
  • Roadmap
  • Development
  • License
  • Changelog

On this page

  • What it does
  • Why is this bad?
  • Example
  1. odoo-lint /
  2. Rules /
  3. no-raise-unlink (E8140)

no-raise-unlink (E8140)#

unlink() raises an exception.

Applies to Odoo 15.0 and later.

What it does#

Reports raise statements inside the unlink() method of a model.

Why is this bad?#

Since Odoo 15.0, checks that prevent deleting records belong in a method decorated with @api.ondelete. That method is skipped when the module is uninstalled, so uninstalling does not fail on your check.

Example#

def unlink(self):
    if self.filtered("posted"):
        raise UserError(_("Cannot delete posted entries."))
    return super().unlink()

Use instead:

@api.ondelete(at_uninstall=False)
def _unlink_except_posted(self):
    if self.filtered("posted"):
        raise UserError(_("Cannot delete posted entries."))
Previous
no-write-in-compute (E8135)
Next
manifest-behind-migrations (E8145)

2026, bosd

Made with Sphinx and Shibuya theme.