Opened 6 years ago

Last modified 3 months ago

#11560 new New feature

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

Reported by: rfk Owned by: nobody
Component: Database layer (models, ORM) Version: 1.1-beta
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: yes
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description (last modified by julien)

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 rfk 4 years ago.

Download all attachments as: .zip

Change History (11)

comment:1 Changed 6 years ago by rfk

  • Component changed from Uncategorized to Database layer (models, ORM)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 6 years ago by Alex

  • Triage Stage changed from Unreviewed to Accepted

comment:3 Changed 4 years ago by julien

  • Severity set to Normal
  • Type set to New feature

comment:4 Changed 4 years ago by julien

  • 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.

Changed 4 years ago by rfk

comment:5 Changed 4 years ago by rfk

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

comment:6 Changed 3 years ago by aaugustin

  • UI/UX unset

Change UI/UX from NULL to False.

comment:7 Changed 3 years ago by aaugustin

  • Easy pickings unset

Change Easy pickings from NULL to False.

comment:8 Changed 19 months ago by gzerone@…

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

comment:9 Changed 3 months ago by Griatch

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 Changed 3 months ago by 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.

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