From 0fa339ce71bae6f9cebe341876f6aa41840ca2ff Mon Sep 17 00:00:00 2001 From: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> Date: Fri, 19 Sep 2025 16:27:51 +0200 Subject: [6.0.x] Fixed #36611, Refs #36580 -- Added system check for multicolumn ForeignObject in Meta.indexes/constraints/unique_together. ForeignObjects with multiple `from_fields` are not supported in these options. Co-authored-by: Jacob Walls Co-authored-by: Natalia <124304+nessita@users.noreply.github.com> Backport of 5b51e6f759f2ba993219347435149173c756c478 from main. --- tests/invalid_models_tests/test_models.py | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'tests') diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index 5780704eae..2a39e250bd 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -166,6 +166,54 @@ class UniqueTogetherTests(SimpleTestCase): ], ) + def test_pointing_to_foreign_object(self): + class Reference(models.Model): + reference_id = models.IntegerField(unique=True) + + class ReferenceTab(models.Model): + reference_id = models.IntegerField() + reference = models.ForeignObject( + Reference, + from_fields=["reference_id"], + to_fields=["reference_id"], + on_delete=models.CASCADE, + ) + + class Meta: + unique_together = [["reference"]] + + self.assertEqual(ReferenceTab.check(), []) + + def test_pointing_to_foreign_object_multi_column(self): + class Reference(models.Model): + reference_id = models.IntegerField(unique=True) + code = models.CharField(max_length=1) + + class ReferenceTabMultiple(models.Model): + reference_id = models.IntegerField() + code = models.CharField(max_length=1) + reference = models.ForeignObject( + Reference, + from_fields=["reference_id", "code"], + to_fields=["reference_id", "code"], + on_delete=models.CASCADE, + ) + + class Meta: + unique_together = [["reference"]] + + self.assertEqual( + ReferenceTabMultiple.check(), + [ + Error( + "'unique_together' refers to a ForeignObject 'reference' with " + "multiple 'from_fields', which is not supported for that option.", + obj=ReferenceTabMultiple, + id="models.E049", + ), + ], + ) + @isolate_apps("invalid_models_tests") class IndexesTests(TestCase): -- cgit v1.3