diff options
author | Hasan Ramezani <hasan.r67@gmail.com> | 2021-04-13 11:51:19 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-04-14 10:06:18 +0200 |
commit | a77c9a4229cfef790ec18001b2cd18bd9c4aedbc (patch) | |
tree | f45666c69c77f76d01674d00d6b3750b4767fa86 /tests/invalid_models_tests | |
parent | 33abc55601107e9f12db3f0c16b3498b26c445f2 (diff) | |
download | django-a77c9a4229cfef790ec18001b2cd18bd9c4aedbc.tar.gz |
Fixed #32635 -- Fixed system check crash for reverse o2o relations in CheckConstraint.check and UniqueConstraint.condition.
Regression in b7b7df5fbcf44e6598396905136cab5a19e9faff.
Thanks Szymon Zmilczak for the report.
Diffstat (limited to 'tests/invalid_models_tests')
-rw-r--r-- | tests/invalid_models_tests/test_models.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index 6c3017ff47..958ad120ca 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -1695,6 +1695,27 @@ class ConstraintsTests(TestCase): ]) @skipUnlessDBFeature('supports_table_check_constraints') + def test_check_constraint_pointing_to_reverse_o2o(self): + class Model(models.Model): + parent = models.OneToOneField('self', models.CASCADE) + + class Meta: + constraints = [ + models.CheckConstraint( + name='name', + check=models.Q(model__isnull=True), + ), + ] + + self.assertEqual(Model.check(databases=self.databases), [ + Error( + "'constraints' refers to the nonexistent field 'model'.", + obj=Model, + id='models.E012', + ), + ]) + + @skipUnlessDBFeature('supports_table_check_constraints') def test_check_constraint_pointing_to_m2m_field(self): class Model(models.Model): m2m = models.ManyToManyField('self') @@ -1943,6 +1964,28 @@ class ConstraintsTests(TestCase): ) ] if connection.features.supports_partial_indexes else []) + def test_unique_constraint_pointing_to_reverse_o2o(self): + class Model(models.Model): + parent = models.OneToOneField('self', models.CASCADE) + + class Meta: + required_db_features = {'supports_partial_indexes'} + constraints = [ + models.UniqueConstraint( + fields=['parent'], + name='name', + condition=models.Q(model__isnull=True), + ), + ] + + self.assertEqual(Model.check(databases=self.databases), [ + Error( + "'constraints' refers to the nonexistent field 'model'.", + obj=Model, + id='models.E012', + ), + ] if connection.features.supports_partial_indexes else []) + def test_deferrable_unique_constraint(self): class Model(models.Model): age = models.IntegerField() |