summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2013-10-03 13:44:10 -0400
committerSimon Charette <charette.s@gmail.com>2013-10-04 16:23:06 -0400
commit948d209adac566d89f44f073fdd77a371c18e269 (patch)
tree6dece7d834a68dc1f532a3b06483b38988c2aab5 /django
parentdc3d2ac98c1bcfad74d3e9523caf07e7e9fb15aa (diff)
Fixed #21217 -- Avoid connecting `(pre|post)_init` signals to abstract senders.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/contenttypes/generic.py8
-rw-r--r--django/db/models/fields/files.py4
2 files changed, 7 insertions, 5 deletions
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index b34847b81d..1fdb1f1894 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -14,7 +14,7 @@ from django.db.models.fields.related import ForeignObject, ForeignObjectRel
from django.db.models.related import PathInfo
from django.db.models.sql.where import Constraint
from django.forms import ModelForm, ALL_FIELDS
-from django.forms.models import (BaseModelFormSet, modelformset_factory, save_instance,
+from django.forms.models import (BaseModelFormSet, modelformset_factory,
modelform_defines_fields)
from django.contrib.admin.options import InlineModelAdmin, flatten_fieldsets
from django.contrib.contenttypes.models import ContentType
@@ -46,10 +46,10 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)):
self.cache_attr = "_%s_cache" % name
cls._meta.add_virtual_field(self)
- # For some reason I don't totally understand, using weakrefs here doesn't work.
- signals.pre_init.connect(self.instance_pre_init, sender=cls, weak=False)
+ # Only run pre-initialization field assignment on non-abstract models
+ if not cls._meta.abstract:
+ signals.pre_init.connect(self.instance_pre_init, sender=cls)
- # Connect myself as the descriptor for this field
setattr(cls, name, self)
def instance_pre_init(self, signal, sender, args, kwargs, **_kwargs):
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index 61e3eebf49..557ec6ec8a 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -358,7 +358,9 @@ class ImageField(FileField):
# Attach update_dimension_fields so that dimension fields declared
# after their corresponding image field don't stay cleared by
# Model.__init__, see bug #11196.
- signals.post_init.connect(self.update_dimension_fields, sender=cls)
+ # Only run post-initialization dimension update on non-abstract models
+ if not cls._meta.abstract:
+ signals.post_init.connect(self.update_dimension_fields, sender=cls)
def update_dimension_fields(self, instance, force=False, *args, **kwargs):
"""