mirror of https://github.com/django/django.git
Fixed #25431 -- Readded inline foreign keys to modelformset instances
Too much field exclusions in form's construct_instance() in _post_clean()
could lead to some unexpected missing ForeignKey values.
Fixes a regression from 45e049937
. Refs #13776.
This commit is contained in:
parent
c07f9fef39
commit
65a1055a36
|
@ -376,6 +376,11 @@ class BaseModelForm(BaseForm):
|
||||||
|
|
||||||
exclude = self._get_validation_exclusions()
|
exclude = self._get_validation_exclusions()
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.instance = construct_instance(self, self.instance, opts.fields, exclude)
|
||||||
|
except ValidationError as e:
|
||||||
|
self._update_errors(e)
|
||||||
|
|
||||||
# Foreign Keys being used to represent inline relationships
|
# Foreign Keys being used to represent inline relationships
|
||||||
# are excluded from basic field value validation. This is for two
|
# are excluded from basic field value validation. This is for two
|
||||||
# reasons: firstly, the value may not be supplied (#12507; the
|
# reasons: firstly, the value may not be supplied (#12507; the
|
||||||
|
@ -387,11 +392,6 @@ class BaseModelForm(BaseForm):
|
||||||
if isinstance(field, InlineForeignKeyField):
|
if isinstance(field, InlineForeignKeyField):
|
||||||
exclude.append(name)
|
exclude.append(name)
|
||||||
|
|
||||||
try:
|
|
||||||
self.instance = construct_instance(self, self.instance, opts.fields, exclude)
|
|
||||||
except ValidationError as e:
|
|
||||||
self._update_errors(e)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.instance.full_clean(exclude=exclude, validate_unique=False)
|
self.instance.full_clean(exclude=exclude, validate_unique=False)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
|
|
|
@ -43,3 +43,6 @@ Bugfixes
|
||||||
* Moved the :ref:`unsaved model instance assignment data loss check
|
* Moved the :ref:`unsaved model instance assignment data loss check
|
||||||
<unsaved-model-instance-check-18>` on reverse relations to ``Model.save()``
|
<unsaved-model-instance-check-18>` on reverse relations to ``Model.save()``
|
||||||
(:ticket:`25160`).
|
(:ticket:`25160`).
|
||||||
|
|
||||||
|
* Readded inline foreign keys to form instances when validating model formsets
|
||||||
|
(:ticket:`25431`).
|
||||||
|
|
|
@ -37,6 +37,10 @@ class Book(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
# Ensure author is always accessible in clean method
|
||||||
|
assert self.author.name is not None
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class BookWithCustomPK(models.Model):
|
class BookWithCustomPK(models.Model):
|
||||||
|
|
Loading…
Reference in New Issue