diff options
| author | Simon Charette <charette.s@gmail.com> | 2013-10-03 13:44:10 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2013-10-04 16:23:06 -0400 |
| commit | 948d209adac566d89f44f073fdd77a371c18e269 (patch) | |
| tree | 6dece7d834a68dc1f532a3b06483b38988c2aab5 /django | |
| parent | dc3d2ac98c1bcfad74d3e9523caf07e7e9fb15aa (diff) | |
Fixed #21217 -- Avoid connecting `(pre|post)_init` signals to abstract senders.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/contenttypes/generic.py | 8 | ||||
| -rw-r--r-- | django/db/models/fields/files.py | 4 |
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): """ |
