Переглянути джерело

Fixed #13366 -- Corrected the field __setstate__ method to avoid a race condition when initially importing models. Thanks to Brett Hoerner for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13005 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Russell Keith-Magee 15 роки тому
батько
коміт
cb906e1593

+ 4 - 1
django/db/models/fields/__init__.py

@@ -143,7 +143,10 @@ class Field(object):
         self.__dict__.update(data)
 
         # Restore the default
-        self.default = self.model._meta.get_field_by_name(self.name)[0].default
+        try:
+            self.default = self.model._meta.get_field(self.name).default
+        except FieldDoesNotExist:
+            self.default = NOT_PROVIDED
 
     def to_python(self, value):
         """

+ 0 - 0
tests/regressiontests/admin_scripts/app_with_import/__init__.py


+ 7 - 0
tests/regressiontests/admin_scripts/app_with_import/models.py

@@ -0,0 +1,7 @@
+from django.contrib.comments.models import Comment
+from django.db import models
+
+# Regression for #13368. This is an example of a model
+# that imports a class that has an abstract base class.
+class CommentScore(models.Model):
+    comment = models.OneToOneField(Comment, primary_key=True)

+ 9 - 0
tests/regressiontests/admin_scripts/tests.py

@@ -987,6 +987,15 @@ class ManageValidate(AdminScriptTestCase):
         self.assertNoOutput(err)
         self.assertOutput(out, '0 errors found')
 
+    def test_app_with_import(self):
+        "manage.py validate does not raise errors when an app imports a base class that itself has an abstract base"
+        self.write_settings('settings.py',
+            apps=['admin_scripts.app_with_import', 'django.contrib.comments'],
+            sdict={'DEBUG': True})
+        args = ['validate']
+        out, err = self.run_manage(args)
+        self.assertNoOutput(err)
+        self.assertOutput(out, '0 errors found')
 
 ##########################################################################
 # COMMAND PROCESSING TESTS