#27340: Model pre_init signal should provide an `instance` argument
--------------------------------+--------------------
Reporter: Ask Solem Hoel | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.10
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+--------------------
I struggle to find reasons as to why this argument is ommitted.
The current signature for pre_init is:
{{{
class Model(six.with_metaclass(ModelBase)):
_deferred = False
def __init__(self, *args, **kwargs):
signals.pre_init.send(sender=self.__class__, args=args,
kwargs=kwargs)
}}}
I suggest that the signature should be:
{{{
class Model(six.with_metaclass(ModelBase)):
_deferred = False
def __init__(self, *args, **kwargs):
signals.pre_init.send(sender=self.__class__, args=args,
kwargs=kwargs, instance=self)
}}}
Or alternatively, that the `post_init` signal contains the args and kwargs
used to construct the model.
The reason for wanting access to the instance in pre_init is that I want
to track changes
to the model since it was first retrieved from the database - This is
currently not possible without subclassing Model,
and that is not a realistic option for us as we deal with third party
models.
The current way we handle this is by using `pre_save` to fetch the row
from the database again, but this is suboptimal
and this a simple change would allow us to do this.
--
Ticket URL: <https://code.djangoproject.com/ticket/27340>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/046.fc94fb75509c1f2b46e962efc1fa2670%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.