[4.0.x] Fixed #33335 -- Made model validation ignore functional unique constraints.

Regression in 3aa545281e.

Thanks Hervé Le Roy for the report.

Backport of 1eaf38fa87 from main
This commit is contained in:
Hannes Ljungberg 2021-12-04 21:03:38 +01:00 committed by Mariusz Felisiak
parent 7bde53a7ae
commit fed7f992ac
4 changed files with 35 additions and 6 deletions

View file

@ -8,7 +8,8 @@ from django.test import TestCase
from .models import (
CustomPKModel, FlexibleDatePost, ModelToValidate, Post, UniqueErrorsModel,
UniqueFieldsModel, UniqueForDateModel, UniqueTogetherModel,
UniqueFieldsModel, UniqueForDateModel, UniqueFuncConstraintModel,
UniqueTogetherModel,
)
@ -86,6 +87,13 @@ class GetUniqueCheckTests(unittest.TestCase):
), m._get_unique_checks(exclude='start_date')
)
def test_func_unique_constraint_ignored(self):
m = UniqueFuncConstraintModel()
self.assertEqual(
m._get_unique_checks(),
([(UniqueFuncConstraintModel, ('id',))], []),
)
class PerformUniqueChecksTest(TestCase):
def test_primary_key_unique_check_not_performed_when_adding_and_pk_not_specified(self):
@ -108,6 +116,10 @@ class PerformUniqueChecksTest(TestCase):
mtv = ModelToValidate(number=10, name='Some Name')
mtv.full_clean()
def test_func_unique_check_not_performed(self):
with self.assertNumQueries(0):
UniqueFuncConstraintModel(field='some name').full_clean()
def test_unique_for_date(self):
Post.objects.create(
title="Django 1.0 is released", slug="Django 1.0",