summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-06 11:55:30 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-07-06 11:55:30 +0000
commit0d0cbfd56ee468a50910d2e0686a0f28029992ba (patch)
tree1661ea6c604a364ff12eb6a44bdef312a252a58f
parente2740dd400e202d9e1f60413b8abac27f7d57933 (diff)
Fixed #7621 -- Enable superclassing of the various metaclasses we use.
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
-rw-r--r--AUTHORS1
-rw-r--r--django/db/models/base.py14
-rw-r--r--django/newforms/forms.py3
3 files changed, 8 insertions, 10 deletions
diff --git a/AUTHORS b/AUTHORS
index 164ec50404..c902404f3c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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>
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 5669694a1b..5e92a5adc1 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -31,19 +31,15 @@ except NameError:
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:
diff --git a/django/newforms/forms.py b/django/newforms/forms.py
index 2c481e47a8..fc203f36b5 100644
--- a/django/newforms/forms.py
+++ b/django/newforms/forms.py
@@ -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