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|
|Cc:||Anssi Kääriäinen||Triage Stage:||Unreviewed|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
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.