diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-09-03 18:38:43 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-09-03 18:38:43 +0000 |
| commit | d88688014f7fca77fb18530d36dd77e10b4bcb82 (patch) | |
| tree | 67653a0ae5b7e72fb079e542689c81a16685d6b9 /django/db/models/base.py | |
| parent | 9a89d1eb9f0b651a5ead0c9d41817c6bce6e8c1a (diff) | |
Fixed #7588 -- Inherit fields from concrete ancestor classes via abstract base
classes. Based on a patch from emulbreh.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8932 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/base.py')
| -rw-r--r-- | django/db/models/base.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index da3d0e77f2..f94d25c9f5 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -94,8 +94,8 @@ class ModelBase(type): new_class._meta.virtual_fields field_names = set([f.name for f in new_fields]) - # Concrete classes... if not base._meta.abstract: + # Concrete classes... if base in o2o_map: field = o2o_map[base] field.primary_key = True @@ -107,9 +107,11 @@ class ModelBase(type): new_class.add_to_class(attr_name, field) new_class._meta.parents[base] = field - # .. and abstract ones. else: - # Check for clashes between locally declared fields and those on the ABC. + # .. and abstract ones. + + # Check for clashes between locally declared fields and those + # on the ABC. parent_fields = base._meta.local_fields + base._meta.local_many_to_many for field in parent_fields: if field.name in field_names: @@ -119,6 +121,9 @@ class ModelBase(type): (field.name, name, base.__name__)) new_class.add_to_class(field.name, copy.deepcopy(field)) + # Pass any non-abstract parent classes onto child. + new_class._meta.parents.update(base._meta.parents) + # Inherit managers from the abstract base classes. base_managers = base._meta.abstract_managers base_managers.sort() |
