Django

Code

Show
Ignore:
Timestamp:
07/06/08 06:55:30 (5 months ago)
Author:
mtredinnick
Message:

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.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/base.py

    r7814 r7846  
    3232    "Metaclass for all models" 
    3333    def __new__(cls, name, bases, attrs): 
    34         # If this isn't a subclass of Model, don't do anything special. 
    35         try: 
    36             parents = [b for b in bases if issubclass(b, Model)] 
    37         except NameError: 
    38             # 'Model' isn't defined yet, meaning we're looking at Django's own 
    39             # Model class, defined below. 
    40             parents = [] 
     34        super_new = super(ModelBase, cls).__new__ 
     35        parents = [b for b in bases if isinstance(b, ModelBase)] 
    4136        if not parents: 
    42             return super(ModelBase, cls).__new__(cls, name, bases, attrs) 
     37            # If this isn't a subclass of Model, don't do anything special. 
     38            return super_new(cls, name, bases, attrs) 
    4339 
    4440        # Create the class. 
    4541        module = attrs.pop('__module__') 
    46         new_class = type.__new__(cls, name, bases, {'__module__': module}) 
     42        new_class = super_new(cls, name, bases, {'__module__': module}) 
    4743        attr_meta = attrs.pop('Meta', None) 
    4844        abstract = getattr(attr_meta, 'abstract', False)