Skip to content

Commit 335a27f

Browse files
committed
Add test to reproduce problem with nullable fields part of a unique constraint
Ref encode#9378
1 parent b25028a commit 335a27f

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

tests/test_model_serializer.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,3 +1400,32 @@ class Meta:
14001400
serializer.save()
14011401

14021402
self.assertEqual(instance.char_field, 'value changed by signal')
1403+
1404+
1405+
class Tag(models.Model):
1406+
name = models.CharField(max_length=100)
1407+
1408+
1409+
class UniqueConstraintModel(models.Model):
1410+
title = models.CharField(max_length=100)
1411+
age = models.IntegerField(null=True)
1412+
tag = models.ForeignKey(Tag, on_delete=models.CASCADE, related_name='instances', null=True)
1413+
1414+
class Meta:
1415+
constraints = [
1416+
# Unique constraint on 2 nullable fields
1417+
models.UniqueConstraint(name='unique_constraint', fields=('age', 'tag'))
1418+
]
1419+
1420+
1421+
class TestUniqueConstraintWithNullableFields(TestCase):
1422+
def test_nullable_unique_constraint_fields_are_not_required(self):
1423+
class UniqueConstraintSerializer(serializers.ModelSerializer):
1424+
class Meta:
1425+
model = UniqueConstraintModel
1426+
fields = '__all__'
1427+
1428+
serializer = UniqueConstraintSerializer(data={'title': 'Bob'})
1429+
self.assertTrue(serializer.is_valid(), serializer.errors)
1430+
result = serializer.save()
1431+
self.assertIsInstance(result, UniqueConstraintModel)

0 commit comments

Comments
 (0)