Opened 15 years ago

Closed 8 years ago

#11560 closed New feature (fixed)

let proxy models multiple-inherit from the same concrete base model

Reported by: Ryan Kelly Owned by: Akshesh Doshi
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description (last modified by Julien Phalip)

Currently proxy models are required to have a single concrete base model class. Unfortunately this prevents me from combining several proxy subclasses of the same model. In my particular use case, I have two different apps that provide two different proxies of the standard User model. To successfully use both apps I need to create another subclass that combines the two, e.g:

class MyUser(App1User,App2User):
    class Meta:
        proxy = True

This gives a TypeError: "Proxy model 'MyUser' has more than one non-abstract model base class". But since App1User and App2User proxy the same underlying model, there's no ambiguity introduced by this multiple inheritance and I think it should be permitted.

Attached is a simple patch to make this work, by permitting additional concrete base classes if they are identical to the one that was already found.

Attachments (1)

multiple_proxy_models.diff (3.4 KB ) - added by Ryan Kelly 13 years ago.

Download all attachments as: .zip

Change History (18)

comment:1 by Ryan Kelly, 15 years ago

Component: UncategorizedDatabase layer (models, ORM)

comment:2 by Alex Gaynor, 15 years ago

Triage Stage: UnreviewedAccepted

comment:3 by Julien Phalip, 13 years ago

Severity: Normal
Type: New feature

comment:4 by Julien Phalip, 13 years ago

Description: modified (diff)
Needs documentation: set
Patch needs improvement: set

The tests would need to be rewritten using unittests since this is now Django's preferred way.

by Ryan Kelly, 13 years ago

Attachment: multiple_proxy_models.diff added

comment:5 by Ryan Kelly, 13 years ago

I've redone the patch against latest trunk and added a brief note in the proxy models documentaion.

comment:6 by Aymeric Augustin, 12 years ago

UI/UX: unset

Change UI/UX from NULL to False.

comment:7 by Aymeric Augustin, 12 years ago

Easy pickings: unset

Change Easy pickings from NULL to False.

comment:8 by gzerone@…, 11 years ago

Hi rfk, thanks for the patch file, it works for me. Hope the feature will work on master branch.

comment:9 by Griatch, 9 years ago

This has been lurking around for a long time, any idea when this might merge into master? The patch seems to have unittest information now and the feature itself is working. We would much like to use this feature without having to patch django itself.

comment:10 by Tim Graham, 9 years ago

The patch needs to be updated to apply cleanly. If you can update it and send a pull request, that will help. Also a mention in the release notes and a .. versionchanged:: 1.8 annotation would be helpful. See our patch review checklist.

comment:11 by Asif Saifuddin Auvi, 8 years ago

Owner: changed from nobody to Asif Saifuddin Auvi
Status: newassigned
Version: 1.1-betamaster

in reply to:  10 comment:12 by Asif Saifuddin Auvi, 8 years ago

Replying to timgraham:

The patch needs to be updated to apply cleanly. If you can update it and send a pull request, that will help. Also a mention in the release notes and a .. versionchanged:: 1.8 annotation would be helpful. See our patch review checklist.

Hi Tim,

Is this issue already resolved by other works ? or I should work on the patch to implement it cleanly?

comment:13 by Tim Graham, 8 years ago

I don't know of any work that would have resolved this ticket.

comment:14 by Akshesh Doshi, 8 years ago

Owner: changed from Asif Saifuddin Auvi to Akshesh Doshi

comment:15 by Akshesh Doshi, 8 years ago

Patch needs improvement: unset

comment:16 by Tim Graham, 8 years ago

Needs documentation: unset
Patch needs improvement: set

Left a few comments for improvement.

comment:17 by Tim Graham <timograham@…>, 8 years ago

Resolution: fixed
Status: assignedclosed

In 49f95cc0:

Fixed #11560 -- Allowed proxy model multiple-inheritance from the same concrete base model.

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