summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/db/models/base.py9
-rw-r--r--django/forms/models.py5
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)