diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/base.py | 9 | ||||
| -rw-r--r-- | django/forms/models.py | 5 |
2 files changed, 13 insertions, 1 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index bf9854d289..bd638e2499 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -583,6 +583,15 @@ class Model(six.with_metaclass(ModelBase, object)): if field: setattr(self, field.attname, self._get_pk_val(parent._meta)) + # Since we didn't have an instance of the parent handy, we + # set attname directly, bypassing the descriptor. + # Invalidate the related object cache, in case it's been + # accidentally populated. A fresh instance will be + # re-built from the database if necessary. + cache_name = field.get_cache_name() + if hasattr(self, cache_name): + delattr(self, cache_name) + if meta.proxy: return diff --git a/django/forms/models.py b/django/forms/models.py index 0913a4e8b8..27c246b668 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -692,7 +692,10 @@ class BaseInlineFormSet(BaseModelFormSet): self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name() if queryset is None: queryset = self.model._default_manager - qs = queryset.filter(**{self.fk.name: self.instance}) + if self.instance.pk: + qs = queryset.filter(**{self.fk.name: self.instance}) + else: + qs = queryset.none() super(BaseInlineFormSet, self).__init__(data, files, prefix=prefix, queryset=qs, **kwargs) |
