Просмотр исходного кода

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
Alex Gaynor 14 лет назад
Родитель
Сommit
91414c4bb8

+ 2 - 0
django/db/models/base.py

@@ -1,6 +1,7 @@
 import types
 import sys
 from itertools import izip
+
 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 import validators
@@ -361,6 +362,7 @@ class Model(object):
                     pass
             if kwargs:
                 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)
 
     def __repr__(self):

+ 8 - 0
tests/modeltests/model_inheritance/models.py

@@ -143,3 +143,11 @@ class Copy(NamedURL):
 
     def __unicode__(self):
         return self.content
+
+class Mixin(object):
+    def __init__(self):
+        self.other_attr = 1
+        super(Mixin, self).__init__()
+
+class MixinModel(models.Model, Mixin):
+    pass

+ 5 - 1
tests/modeltests/model_inheritance/tests.py

@@ -4,7 +4,7 @@ from django.core.exceptions import FieldError
 from django.test import TestCase
 
 from models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place,
-    Post, Restaurant, Student, StudentWorker, Supplier, Worker)
+    Post, Restaurant, Student, StudentWorker, Supplier, Worker, MixinModel)
 
 
 class ModelInheritanceTests(TestCase):
@@ -269,3 +269,7 @@ class ModelInheritanceTests(TestCase):
         self.assertNumQueries(1,
             lambda: ItalianRestaurant.objects.select_related("chef")[0].chef
         )
+
+    def test_mixin_init(self):
+        m = MixinModel()
+        self.assertEqual(m.other_attr, 1)