Opened 4 years ago

Closed 4 years ago

#17678 closed Bug (fixed)

Model._meta proxy_for_model set up incorrectly

Reported by: akaariai Owned by: nobody
Component: Database layer (models, ORM) Version: 1.3
Severity: Normal Keywords:
Cc: akaariai Triage Stage: Unreviewed
Has patch: yes Needs documentation:
Needs tests: Patch needs improvement:
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 akaariai 4 years ago.

Download all attachments as: .zip

Change History (2)

Changed 4 years ago by akaariai

comment:1 Changed 4 years ago by carljm

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

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