Skip to content

Commit

Permalink
Fixed #7621 -- Enable superclassing of the various metaclasses we use.
Browse files Browse the repository at this point in the history
Also tidy up some initialisation code in django.db.models.base.ModelBase.
Thanks, Christian Tanzer.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7846 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
mtredinnick committed Jul 6, 2008
1 parent 11f3ba9 commit 26f7d95
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 10 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -350,6 +350,7 @@ answer newbie questions, and generally made Django that much better:
Swaroop C H <http://www.swaroopch.info>
Aaron Swartz <http://www.aaronsw.com/>
Ville Säävuori <http://www.unessa.net/>
Christian Tanzer <tanzer@swing.co.at>
Tyler Tarabula <tyler.tarabula@gmail.com>
Tyson Tate <tyson@fallingbullets.com>
Frank Tegtmeyer <fte@fte.to>
Expand Down
14 changes: 5 additions & 9 deletions django/db/models/base.py
Expand Up @@ -31,19 +31,15 @@
class ModelBase(type):
"Metaclass for all models"
def __new__(cls, name, bases, attrs):
# If this isn't a subclass of Model, don't do anything special.
try:
parents = [b for b in bases if issubclass(b, Model)]
except NameError:
# 'Model' isn't defined yet, meaning we're looking at Django's own
# Model class, defined below.
parents = []
super_new = super(ModelBase, cls).__new__
parents = [b for b in bases if isinstance(b, ModelBase)]
if not parents:
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
# If this isn't a subclass of Model, don't do anything special.
return super_new(cls, name, bases, attrs)

# Create the class.
module = attrs.pop('__module__')
new_class = type.__new__(cls, name, bases, {'__module__': module})
new_class = super_new(cls, name, bases, {'__module__': module})
attr_meta = attrs.pop('Meta', None)
abstract = getattr(attr_meta, 'abstract', False)
if not attr_meta:
Expand Down
3 changes: 2 additions & 1 deletion django/newforms/forms.py
Expand Up @@ -56,7 +56,8 @@ class DeclarativeFieldsMetaclass(type):
"""
def __new__(cls, name, bases, attrs):
attrs['base_fields'] = get_declared_fields(bases, attrs)
return type.__new__(cls, name, bases, attrs)
return super(DeclarativeFieldsMetaclass,
cls).__new__(cls, name, bases, attrs)

class BaseForm(StrAndUnicode):
# This is the main implementation of all the Form logic. Note that this
Expand Down

0 comments on commit 26f7d95

Please sign in to comment.