Opened 16 years ago
Closed 16 years ago
#10356 closed (fixed)
proxy models: subclass a model without creating a new table
Reported by: | Ryan Kelly | Owned by: | Malcolm Tredinnick |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.0 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Following a discussion with Malcolm on django-users, I've implemented support for what's tentatively named "proxy models". These provide a way for model subclasses to modify the behaviour of a model without creating a new database table. The canonical example seems to be subclassing the User model - you might want to add additional methods/managers/etc, but you still want to pull data directly from the main users table. Under the attached patch this would look like the following:
class MyUser(User) def extra_method(self): print "I am a new method" class Meta: proxy = True
MyUser is now simply a different view onto the main User table, rather than a full-blown subclass with a separate table.
The main body of the patch is to db/models/base.py, where the meta attributes of proxy models are automatically set up. Since it's now possible for a model to be using the same (table,primary key) pair as one of its base classes, I've added a small optimisation in db/models/sql/query.py that avoids a needless join in this case. There's also some tests and a first stab at some documentation.
This patch also integrates with (but doesn't require) ticket #3163, by marking proxy models as unmanaged.
The django-users discussion leading to this patch can be found here: http://groups.google.com/group/django-users/browse_thread/thread/fb06ff8e2a296f9c
Attachments (1)
Change History (6)
by , 16 years ago
Attachment: | proxy_models.diff added |
---|
comment:1 by , 16 years ago
Summary: | proxy models: subclassing models without create a new table → proxy models: subclass a model without creating a new table |
---|
whoops, fixed bad grammar in ticket summary
comment:2 by , 16 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:3 by , 16 years ago
Owner: | changed from | to
---|
comment:4 by , 16 years ago
Component: | Uncategorized → Database layer (models, ORM) |
---|
comment:5 by , 16 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
patch implementing proxy models