#23592: Django 1.5 Proxy equality and Caching of related instances
-------------------------------------+-------------------------------------
Reporter: GuillaumeCisco | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.5
(models, ORM) | Resolution:
Severity: Normal | Triage Stage:
Keywords: proxy equality | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by GuillaumeCisco):
* needs_docs: => 0
* needs_tests: => 0
* needs_better_patch: => 0
Old description:
> Hello there :)
>
> This is the first time I write a ticket regarding Django code, so I'll
> try to be as concise as possible.
>
> When upgrading to django 1.5 for our company project, we ran in an
> unexpected behaviour.
>
> We use a proxy model and for our needs, we use equality operator in the
> code.
> Let's say I have a Person Model and a OrderedPerson Model which is a
> proxy of the Person Model.
>
> {{{
> a = Person()
> b = OrderedParson()
> }}}
>
> We have two equal objects (id and __dict__ are similar) so b == a should
> be equal to True (correct in Django 1.4).
> However we get:
>
> b == a <- False
> Due to this commit posted in Django 1.5 version:
> https://github.com/django/django/commit/056ace0f395a58eeac03da9f9ee7e3872e1e407b
> File django/db/models/query.py Lines '''327-336'''
>
> In reality, it is far more complex, because we have a test like:
>
> {{{
> def __setattr__(self, name, value):
> toto = getattr(self, name, None) == value
> # some code with toto variable
> }}}
>
> I found this commit solve the problem regarding proxy equality in Django
> 1.7:
> https://github.com/django/django/commit/4668c142dce77c6f29fb75532c1acfa1b2d322ff
> #diff-507b415116b409afa4f723e41a759a9eR338
> File django/db/models/base.py Lines '''462-464'''
>
> So we use it for our proxy models in Django 1.5
>
> I think it could be very useful to add this piece of code, for versions
> from Django 1.5.
>
> Cheers.
>
> PS: I used these sources for understanding the origin of this "bug":
> http://stackoverflow.com/questions/390250/elegant-ways-to-support-
> equivalence-equality-in-python-classes
> http://stackoverflow.com/questions/3588776/how-is-eq-handled-in-python-
> and-in-what-order/12984987#12984987
> https://docs.djangoproject.com/en/1.7/topics/db/models/#proxy-models
New description:
Hello there :)
This is the first time I write a ticket regarding Django code, so I'll try
to be as concise as possible.
When upgrading to django 1.5 for our company project, we ran in an
unexpected behaviour.
We use a proxy model and for our needs, we use equality operator in the
code.
Let's say I have a Person Model and a OrderedPerson Model which is a proxy
of the Person Model.
{{{
a = Person()
b = OrderedPerson()
}}}
We have two equal objects (id and __dict__ are similar) so b == a should
be equal to True (correct in Django 1.4).
However we get:
b == a <- False
Due to this commit posted in Django 1.5 version:
https://github.com/django/django/commit/056ace0f395a58eeac03da9f9ee7e3872e1e407b
File django/db/models/query.py Lines '''327-336'''
In reality, it is far more complex, because we have a test like:
{{{
def __setattr__(self, name, value):
toto = getattr(self, name, None) == value
# some code with toto variable
}}}
I found this commit solve the problem regarding proxy equality in Django
1.7:
https://github.com/django/django/commit/4668c142dce77c6f29fb75532c1acfa1b2d322ff
#diff-507b415116b409afa4f723e41a759a9eR338
File django/db/models/base.py Lines '''462-464'''
So we use it for our proxy models in Django 1.5
I think it could be very useful to add this piece of code, for versions
from Django 1.5.
Cheers.
PS: I used these sources for understanding the origin of this "bug":
http://stackoverflow.com/questions/390250/elegant-ways-to-support-
equivalence-equality-in-python-classes
http://stackoverflow.com/questions/3588776/how-is-eq-handled-in-python-
and-in-what-order/12984987#12984987
https://docs.djangoproject.com/en/1.7/topics/db/models/#proxy-models
--
--
Ticket URL: <https://code.djangoproject.com/ticket/23592#comment:1>
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/072.9c2599d5002bf2701d0f44836ca71544%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.