Opened 3 years ago
Closed 3 years ago
#32868 closed New feature (wontfix)
Add system check or warning for model fields shadowing methods / other attributes
Reported by: | Adam Johnson | Owned by: | nobody |
---|---|---|---|
Component: | Core (System checks) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Carlton Gibson | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
It's possible to create a field name that replaces a Model method, for example:
from django.db import models class Book(models.Model): delete = models.BooleanField(default=False)
Instances of this model then cannot be deleted with instance.delete()
. (They can be with Model.delete(instance)
, but that's a really rare way of using a method so I expect most developers would not think of that.)
Django could warn about this, at least for some key names that sound like feasible field names, e.g. delete
, save
, pk
, clean
, ...
It's already not possible to create a field called check
since the system check models.E020
warns if the Model.check()
method has been replaced, added in #23615. We could see this ticket as an extension of that, "reserving" more names that Django may depend on.
Thanks for this proposition, however I'm skeptical. I don't think it's worth additional complexity and potential backward incompatibility. In most of cases Django will already crash, e.g.
The extra check added in #23615 was already a bit controversial (see discussion). You can raise the idea on the DevelopersMailingList to reach a wider audience and see what other think.