Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#17436 closed Cleanup/optimization (fixed)

flag attempts to change signature of __init__ on Models

Reported by: straz Owned by: zsiciarz
Component: Documentation Version: 1.3
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description

As a relative Django newbie, I tried to redefine the init method on my Model classes to take additional parameters.
This failed silently - the objects were created but Model.save() did not persist the objects to the database.
I didn't see anything in the Models documentation or FAQ about this, either.

After some searching I found the answer here, namely, "don't do that":
http://stackoverflow.com/questions/843580/writing-a-init-function-to-be-used-in-django-model

Feature request: add a warning which is thrown whenever you subclass django.db.models.Model
with a nonstandard init method. The wording could be something like: "Changing the calling signature
of init on subclasses of Model may prevent objects from being saved correctly. Try using a
classmethod factory pattern to create objects instead."

Doc request: add this to the Models documentation

Attachments (1)

patch_17436.diff (1.6 KB) - added by zsiciarz 3 years ago.
Note about overriding init and other approaches to customize instance creation.

Download all attachments as: .zip

Change History (6)

comment:1 Changed 3 years ago by aaugustin

  • Component changed from Database layer (models, ORM) to Documentation
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted
  • Type changed from New feature to Cleanup/optimization

Accepted as a documentation request.

With a dynamic language, it will always be possible for a developers to shoot himself into the foot. We can't put warnings for all possible mistakes.

comment:2 Changed 3 years ago by zsiciarz

  • Owner changed from nobody to zsiciarz

Changed 3 years ago by zsiciarz

Note about overriding init and other approaches to customize instance creation.

comment:3 Changed 3 years ago by zsiciarz

  • Has patch set

comment:4 Changed 3 years ago by Tim Graham <timgraham@…>

  • Resolution set to fixed
  • Status changed from new to closed

In [7313468f85c3ade1275fc7fef193a4429f4af4bf]:

Fixed #17436 - Added warning about overriding Model.init()

Thanks zsiciarz for the draft patch.

comment:5 Changed 3 years ago by Tim Graham <timgraham@…>

In [c5e35afbccb2777b8eea882e95eba44ed582c361]:

[1.4.X] Fixed #17436 - Added warning about overriding Model.init()

Thanks zsiciarz for the draft patch.

Backport of 7313468f85 from master

Note: See TracTickets for help on using tickets.
Back to Top