Opened 19 months ago
Closed 19 months ago
#34491 closed Bug (wontfix)
Unable to have constraints with same name on different models
Reported by: | Matheus Cansian | Owned by: | nobody |
---|---|---|---|
Component: | Core (System checks) | Version: | 4.2 |
Severity: | Normal | Keywords: | |
Cc: | Simon Charette | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
PR 11278 (ticket #30396) added system checks to enforce uniqueness of indexes and constraints names. The issue is that (at least for PostgreSQL) the check is too strict. The namespace for table constraints (such as CHECK, UNIQUE, FK) is the table itself. This means that you could have the same name for a constraint if they are on different tables. Unfortunately, this system check prevents you for doing that, forcing you to add the unnecessary %(app_label)s_%(class)s to every constraint name.
Considering two models (ModelA and ModelB) both with one CheckConstraint with the same name "test_constraint". The system check would return the following error:
?: (models.E032) constraint name 'test_constraint' is not unique among models: app.ModelA, app.ModelB.
Change History (1)
comment:1 by , 19 months ago
Cc: | added |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Thanks for the report. It's true that constraints on different tables may have the same names on PostgreSQL. However, it's not truth on other databases. Moreover, using the same names is a rare practice when we take into account that it has not been noticed for 4 years. I'd prefer to keep the check for cross-database compatibility. You can always silence it by adding
SILENCED_SYSTEM_CHECKS = ["models.E032"]
to the settings.I hope that makes sense.