summaryrefslogtreecommitdiff
path: root/tests/inline_formsets
diff options
context:
space:
mode:
authorClifford Gama <cliffygamy@gmail.com>2025-03-08 15:46:58 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-03-12 09:16:15 +0100
commit0ebea6e5c07485a36862e9b6e2be18d1694ad2c5 (patch)
tree6ece342336bea4fbdd74cd29a51d9a071901fc82 /tests/inline_formsets
parent5183f7c287a9a5d61ca1103b55166cda52d9c647 (diff)
Fixed #35676 -- Made BaseModelForm validate constraints that reference an InlineForeignKeyField.
Co-authored-by: Simon Charette <charette.s@gmail.com>
Diffstat (limited to 'tests/inline_formsets')
-rw-r--r--tests/inline_formsets/models.py5
-rw-r--r--tests/inline_formsets/tests.py35
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/inline_formsets/models.py b/tests/inline_formsets/models.py
index f4c06e8fac..a090387c42 100644
--- a/tests/inline_formsets/models.py
+++ b/tests/inline_formsets/models.py
@@ -15,6 +15,11 @@ class Child(models.Model):
school = models.ForeignKey(School, models.CASCADE)
name = models.CharField(max_length=100)
+ class Meta:
+ constraints = [
+ models.UniqueConstraint("mother", "father", name="unique_parents"),
+ ]
+
class Poet(models.Model):
name = models.CharField(max_length=100)
diff --git a/tests/inline_formsets/tests.py b/tests/inline_formsets/tests.py
index 1ae9b3f760..0fe9766dc6 100644
--- a/tests/inline_formsets/tests.py
+++ b/tests/inline_formsets/tests.py
@@ -215,3 +215,38 @@ class InlineFormsetFactoryTest(TestCase):
)
formset = PoemFormSet(None, instance=poet)
formset.forms # Trigger form instantiation to run the assert above.
+
+
+class InlineFormsetConstraintsValidationTests(TestCase):
+ def test_constraint_refs_inline_foreignkey_field(self):
+ """
+ Constraints that reference an InlineForeignKeyField should not be
+ skipped from validation (#35676).
+ """
+ ChildFormSet = inlineformset_factory(
+ Parent,
+ Child,
+ fk_name="mother",
+ fields="__all__",
+ extra=1,
+ )
+ father = Parent.objects.create(name="James")
+ school = School.objects.create(name="Hogwarts")
+ mother = Parent.objects.create(name="Lily")
+ Child.objects.create(name="Harry", father=father, mother=mother, school=school)
+ data = {
+ "mothers_children-TOTAL_FORMS": "1",
+ "mothers_children-INITIAL_FORMS": "0",
+ "mothers_children-MIN_NUM_FORMS": "0",
+ "mothers_children-MAX_NUM_FORMS": "1000",
+ "mothers_children-0-id": "",
+ "mothers_children-0-father": str(father.pk),
+ "mothers_children-0-school": str(school.pk),
+ "mothers_children-0-name": "Mary",
+ }
+ formset = ChildFormSet(instance=mother, data=data, queryset=None)
+ self.assertFalse(formset.is_valid())
+ self.assertEqual(
+ formset.errors,
+ [{"__all__": ["Constraint “unique_parents” is violated."]}],
+ )