diff --git a/tests/inline_formsets/models.py b/tests/inline_formsets/models.py
index f4c06e8fac..096b77f8b3 100644
--- a/tests/inline_formsets/models.py
+++ b/tests/inline_formsets/models.py
@@ -32,3 +32,16 @@ class Poem(models.Model):
 
     def __str__(self):
         return self.name
+
+
+class Book(models.Model):
+    poet = models.ForeignKey(Poet, models.CASCADE)
+    name = models.CharField(max_length=100)
+
+    class Meta:
+        constraints = [
+            models.UniqueConstraint("poet", "name", name="unique_together_poet_name")
+        ]
+
+    def __str__(self):
+        return self.name
diff --git a/tests/inline_formsets/tests.py b/tests/inline_formsets/tests.py
index 1ae9b3f760..cb6521ca79 100644
--- a/tests/inline_formsets/tests.py
+++ b/tests/inline_formsets/tests.py
@@ -1,7 +1,7 @@
 from django.forms.models import ModelForm, inlineformset_factory
 from django.test import TestCase, skipUnlessDBFeature
 
-from .models import Child, Parent, Poem, Poet, School
+from .models import Book, Child, Parent, Poem, Poet, School
 
 
 class DeletionTests(TestCase):
@@ -184,6 +184,22 @@ class InlineFormsetFactoryTest(TestCase):
             formset.non_form_errors(), ["Please correct the duplicate data for name."]
         )
 
+    def test_unique_constraint_validation_error(self):
+        poet = Poet.objects.create(name="Poet")
+        BookFormSet = inlineformset_factory(Poet, Book, fields=["name"])
+        data = {
+            "book_set-TOTAL_FORMS": "2",
+            "book_set-INITIAL_FORMS": "0",
+            "book_set-MAX_NUM_FORMS": "2",
+            "book_set-0-name": "A Book",
+            "book_set-1-name": "A Book",
+        }
+        formset = BookFormSet(data, instance=poet)
+        self.assertFalse(formset.is_valid())
+        self.assertEqual(
+            formset.non_form_errors(), ["Please correct the duplicate data for name."]
+        )
+
     def test_fk_not_duplicated_in_form_fields(self):
         """
         A foreign key name isn't duplicated in form._meta fields (#21332).
