diff --git a/django/forms/models.py b/django/forms/models.py
index 2a3f8bd..09b46b5 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -342,9 +342,8 @@ class BaseModelForm(BaseForm):
         Calls the instance's validate_unique() method and updates the form's
         validation errors if any were raised.
         """
-        exclude = self._get_validation_exclusions()
         try:
-            self.instance.validate_unique(exclude=exclude)
+            self.instance.validate_unique()
         except ValidationError, e:
             self._update_errors(e.message_dict)
 
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 60319ea..36579e2 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -670,6 +670,18 @@ class Reservation(models.Model):
     start_date = models.DateTimeField()
     price = models.IntegerField()
     
+class UniqueTogether(models.Model):
+    t1 = models.CharField(max_length=255, blank=True, null=True)
+    t2 = models.CharField(max_length=255, blank=True, null=True)
+    t3 = models.CharField(max_length=255, blank=True, null=True)
+    
+    class Meta:
+        unique_together = ['t1','t2','t3']
+        
+class UniqueTogetherAdmin(admin.ModelAdmin):
+    list_display = ['t3', 't1', 't2']
+    list_editable = ['t1', 't2',]
+    
 admin.site.register(Article, ArticleAdmin)
 admin.site.register(CustomArticle, CustomArticleAdmin)
 admin.site.register(Section, save_as=True, inlines=[ArticleInline])
@@ -706,6 +718,7 @@ admin.site.register(CyclicOne)
 admin.site.register(CyclicTwo)
 admin.site.register(WorkHour, WorkHourAdmin)
 admin.site.register(Reservation)
+admin.site.register(UniqueTogether, UniqueTogetherAdmin)
 
 # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
 # That way we cover all four cases:
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index acbbbfc..250af13 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -35,7 +35,7 @@ from models import (Article, BarAccount, CustomArticle, EmptyModel,
     Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast,
     Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit,
     Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee,
-    Question, Answer, Inquisition, Actor)
+    Question, Answer, Inquisition, Actor, UniqueTogether)
 
 
 class AdminViewBasicTest(TestCase):
@@ -1338,6 +1338,38 @@ class AdminViewListEditable(TestCase):
         # 1 select per object = 3 selects
         self.assertEqual(response.content.count("<select"), 4)
 
+    def test_partial_unique_together(self):
+        """ Ensure that no IntegrityError is raised when editing some (but
+            not all) of the values specified as unique_together. Refs #13091.
+        """
+        UniqueTogether.objects.create(t1='a', t2='b', t3='c')
+        UniqueTogether.objects.create(t1='b', t2='b', t3='a')
+        UniqueTogether.objects.create(t1='c', t2='a', t3='c')
+        data = {
+            "form-TOTAL_FORMS": "3",
+            "form-INITIAL_FORMS": "3",
+            "form-MAX_NUM_FORMS": "0",
+
+            "form-0-t1": "a",
+            "form-0-t2": "b",
+            "form-0-t3": "c",
+            "form-0-id": "1",
+
+            "form-1-t1": "a",
+            "form-1-t2": "b",
+            "form-1-t3": "c",
+            "form-1-id": "2",
+
+            "form-2-t1": "a",
+            "form-2-t2": "b",
+            "form-2-t3": "c",
+            "form-2-id": "3",
+
+            "_save": "Save",
+        }
+        response = self.client.post('/test_admin/admin/admin_views/uniquetogether/', data)
+        self.assertContains(response, 'Please correct the errors below.')
+        
     def test_post_messages(self):
         # Ticket 12707: Saving inline editable should not show admin
         # action warnings
