mirror of https://github.com/django/django.git
Removed a Python 3-compatibility hack.
Thanks Preston Holmes for the patch.
This commit is contained in:
parent
ebc89a800a
commit
ae4125ffce
|
@ -34,7 +34,10 @@ class ModelBase(type):
|
|||
"""
|
||||
def __new__(cls, name, bases, attrs):
|
||||
super_new = super(ModelBase, cls).__new__
|
||||
parents = [b for b in bases if isinstance(b, ModelBase)]
|
||||
# six.with_metaclass() inserts an extra class called 'NewBase' in the
|
||||
# inheritance tree: Model -> NewBase -> object. Ignore this class.
|
||||
parents = [b for b in bases if isinstance(b, ModelBase) and
|
||||
not (b.__name__ == 'NewBase' and b.__mro__ == (b, object))]
|
||||
if not parents:
|
||||
# If this isn't a subclass of Model, don't do anything special.
|
||||
return super_new(cls, name, bases, attrs)
|
||||
|
@ -276,8 +279,7 @@ class ModelState(object):
|
|||
# This impacts validation only; it has no effect on the actual save.
|
||||
self.adding = True
|
||||
|
||||
|
||||
class ModelWithoutMeta(object):
|
||||
class Model(six.with_metaclass(ModelBase, object)):
|
||||
_deferred = False
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
@ -370,7 +372,7 @@ class ModelWithoutMeta(object):
|
|||
pass
|
||||
if kwargs:
|
||||
raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
|
||||
super(ModelWithoutMeta, self).__init__()
|
||||
super(Model, self).__init__()
|
||||
signals.post_init.send(sender=self.__class__, instance=self)
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -402,7 +404,7 @@ class ModelWithoutMeta(object):
|
|||
only module-level classes can be pickled by the default path.
|
||||
"""
|
||||
if not self._deferred:
|
||||
return super(ModelWithoutMeta, self).__reduce__()
|
||||
return super(Model, self).__reduce__()
|
||||
data = self.__dict__
|
||||
defers = []
|
||||
for field in self._meta.fields:
|
||||
|
@ -877,14 +879,6 @@ class ModelWithoutMeta(object):
|
|||
raise ValidationError(errors)
|
||||
|
||||
|
||||
# For unknown reasons, six.with_metaclass doesn't work correctly for Model.
|
||||
# Fallback to exec'ing the appropriate syntax for each Python version.
|
||||
|
||||
if six.PY3:
|
||||
six.exec_("class Model(ModelWithoutMeta, metaclass=ModelBase): pass")
|
||||
else:
|
||||
six.exec_("class Model(ModelWithoutMeta): __metaclass__ = ModelBase")
|
||||
|
||||
|
||||
############################################
|
||||
# HELPER FUNCTIONS (CURRIED MODEL METHODS) #
|
||||
|
|
Loading…
Reference in New Issue