summaryrefslogtreecommitdiff
path: root/tests/invalid_models_tests
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2021-04-13 11:51:19 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-04-14 10:06:18 +0200
commita77c9a4229cfef790ec18001b2cd18bd9c4aedbc (patch)
treef45666c69c77f76d01674d00d6b3750b4767fa86 /tests/invalid_models_tests
parent33abc55601107e9f12db3f0c16b3498b26c445f2 (diff)
downloaddjango-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.py43
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()