Opened 17 years ago
Closed 17 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 , 17 years ago
| Attachment: | proxy_models.diff added |
|---|
comment:1 by , 17 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 , 17 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:3 by , 17 years ago
| Owner: | changed from to |
|---|
comment:4 by , 17 years ago
| Component: | Uncategorized → Database layer (models, ORM) |
|---|
comment:5 by , 17 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
patch implementing proxy models