Opened 12 years ago

Closed 12 years ago

#17678 closed Bug (fixed)

Model._meta proxy_for_model set up incorrectly

Reported by: Anssi Kääriäinen Owned by: nobody
Component: Database layer (models, ORM) Version: 1.3
Severity: Normal Keywords:
Cc: Anssi Kääriäinen Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

There are some places in the code which assume that proxy_for_model creates a proxy chain. That is, if you have models:

A
Proxy(A)
ProxyProxy(Proxy)

the expected result is that ProxyProxy._meta.proxy_for_model == Proxy, but this isn't true. One place which makes this proxy-chain mistake is the very place that sets up the proxy_for_model so this seems like a clear bug.

In the attached patch I added ._meta.concrete_class, which is always the concrete class of the model. This simplifies code in some places. In addition, the proxy_for_model correctly creates a proxy chain now.

I think the proxy_for_model error was responsible for one bug in admin, but I haven't verified that there was a bug (so, no tests). In addition there is one place in sql/query.py which is working now as it was before, but I am not sure if the before behavior was in fact correct. Neither of these should be this ticket's problems.

The bug is present in at least 1.3, maybe even before.

Attachments (1)

17678.diff (5.1 KB ) - added by Anssi Kääriäinen 12 years ago.

Download all attachments as: .zip

Change History (2)

by Anssi Kääriäinen, 12 years ago

Attachment: 17678.diff added

comment:1 by Carl Meyer, 12 years ago

Resolution: fixed
Status: newclosed

In [17573]:

Fixed #17678 -- Corrected setup of _meta.proxy_for_model and added _meta.concrete_model. Thanks Anssi Kääriäinen.

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