summaryrefslogtreecommitdiff
path: root/tests/model_forms
diff options
context:
space:
mode:
Diffstat (limited to 'tests/model_forms')
-rw-r--r--tests/model_forms/models.py19
-rw-r--r--tests/model_forms/tests.py15
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/model_forms/models.py b/tests/model_forms/models.py
index f6c34a3521..83daa13d71 100644
--- a/tests/model_forms/models.py
+++ b/tests/model_forms/models.py
@@ -543,3 +543,22 @@ class ConstraintsModel(models.Model):
violation_error_message="Price must be greater than zero.",
),
]
+
+
+class AttnameConstraintsModel(models.Model):
+ left = models.ForeignKey(
+ "self", related_name="+", null=True, on_delete=models.SET_NULL
+ )
+ right = models.ForeignKey(
+ "self", related_name="+", null=True, on_delete=models.SET_NULL
+ )
+
+ class Meta:
+ required_db_features = {"supports_table_check_constraints"}
+ constraints = [
+ models.CheckConstraint(
+ name="%(app_label)s_%(class)s_left_not_right",
+ # right_id here is the ForeignKey's attname, not name.
+ condition=~models.Q(left=models.F("right_id")),
+ ),
+ ]
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index f0334e1e86..129ce56c7a 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -30,6 +30,7 @@ from django.utils.version import PY314, PYPY
from .models import (
Article,
ArticleStatus,
+ AttnameConstraintsModel,
Author,
Author1,
Award,
@@ -3766,3 +3767,17 @@ class ConstraintValidationTests(TestCase):
self.assertEqual(
full_form.errors, {"__all__": ["Price must be greater than zero."]}
)
+
+ def test_check_constraint_refs_excluded_field_attname(self):
+ left = AttnameConstraintsModel.objects.create()
+ instance = AttnameConstraintsModel.objects.create(left=left)
+ data = {
+ "left": str(left.id),
+ "right": "",
+ }
+ AttnameConstraintsModelForm = modelform_factory(
+ AttnameConstraintsModel, fields="__all__"
+ )
+ full_form = AttnameConstraintsModelForm(data, instance=instance)
+ self.assertFalse(full_form.is_valid())
+ self.assertEqual(full_form.errors, {"right": ["This field is required."]})