Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #13366 -- Corrected the field __setstate__ method to avoid a ra…

…ce 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
  • Loading branch information...
commit cb906e159326b0edb8759a5e2723d76abade762f 1 parent 424be52
@freakboy3742 freakboy3742 authored
View
5 django/db/models/fields/__init__.py
@@ -143,7 +143,10 @@ def __setstate__(self, data):
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):
"""
View
0  tests/regressiontests/admin_scripts/app_with_import/__init__.py
No changes.
View
7 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)
View
9 tests/regressiontests/admin_scripts/tests.py
@@ -987,6 +987,15 @@ def test_complex_app(self):
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
Please sign in to comment.
Something went wrong with that request. Please try again.