Kaydet (Commit) 91414c4b authored tarafından Alex Gaynor's avatar Alex Gaynor

Fixed #13206 -- call super().__init__() in Model.__init__ to allow mixins to do things there.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15317 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 561af641
import types import types
import sys import sys
from itertools import izip from itertools import izip
import django.db.models.manager # Imported to register signal handler. import django.db.models.manager # Imported to register signal handler.
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS
from django.core import validators from django.core import validators
...@@ -361,6 +362,7 @@ class Model(object): ...@@ -361,6 +362,7 @@ class Model(object):
pass pass
if kwargs: if kwargs:
raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]) raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
super(Model, self).__init__()
signals.post_init.send(sender=self.__class__, instance=self) signals.post_init.send(sender=self.__class__, instance=self)
def __repr__(self): def __repr__(self):
......
...@@ -143,3 +143,11 @@ class Copy(NamedURL): ...@@ -143,3 +143,11 @@ class Copy(NamedURL):
def __unicode__(self): def __unicode__(self):
return self.content return self.content
class Mixin(object):
def __init__(self):
self.other_attr = 1
super(Mixin, self).__init__()
class MixinModel(models.Model, Mixin):
pass
...@@ -4,7 +4,7 @@ from django.core.exceptions import FieldError ...@@ -4,7 +4,7 @@ from django.core.exceptions import FieldError
from django.test import TestCase from django.test import TestCase
from models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place, from models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place,
Post, Restaurant, Student, StudentWorker, Supplier, Worker) Post, Restaurant, Student, StudentWorker, Supplier, Worker, MixinModel)
class ModelInheritanceTests(TestCase): class ModelInheritanceTests(TestCase):
...@@ -269,3 +269,7 @@ class ModelInheritanceTests(TestCase): ...@@ -269,3 +269,7 @@ class ModelInheritanceTests(TestCase):
self.assertNumQueries(1, self.assertNumQueries(1,
lambda: ItalianRestaurant.objects.select_related("chef")[0].chef lambda: ItalianRestaurant.objects.select_related("chef")[0].chef
) )
def test_mixin_init(self):
m = MixinModel()
self.assertEqual(m.other_attr, 1)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment