diff options
Diffstat (limited to 'tests/invalid_models_tests')
| -rw-r--r-- | tests/invalid_models_tests/test_relative_fields.py | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py index 9b69ae4151..4167e0712a 100644 --- a/tests/invalid_models_tests/test_relative_fields.py +++ b/tests/invalid_models_tests/test_relative_fields.py @@ -440,6 +440,84 @@ class RelativeFieldTests(SimpleTestCase): ], ) + def test_foreignkey_to_model_with_composite_primary_key(self): + class Parent(models.Model): + pk = models.CompositePrimaryKey("version", "name") + version = models.IntegerField() + name = models.CharField(max_length=20) + + class Child(models.Model): + rel_class_parent = models.ForeignKey( + Parent, on_delete=models.CASCADE, related_name="child_class_set" + ) + rel_string_parent = models.ForeignKey( + "Parent", on_delete=models.CASCADE, related_name="child_string_set" + ) + + field = Child._meta.get_field("rel_string_parent") + self.assertEqual( + field.check(), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + field = Child._meta.get_field("rel_class_parent") + self.assertEqual( + field.check(), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + + def test_many_to_many_to_model_with_composite_primary_key(self): + class Parent(models.Model): + pk = models.CompositePrimaryKey("version", "name") + version = models.IntegerField() + name = models.CharField(max_length=20) + + class Child(models.Model): + rel_class_parent = models.ManyToManyField( + Parent, related_name="child_class_set" + ) + rel_string_parent = models.ManyToManyField( + "Parent", related_name="child_string_set" + ) + + field = Child._meta.get_field("rel_string_parent") + self.assertEqual( + field.check(from_model=Child), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + field = Child._meta.get_field("rel_class_parent") + self.assertEqual( + field.check(from_model=Child), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + def test_foreign_key_to_non_unique_field(self): class Target(models.Model): bad = models.IntegerField() # No unique=True @@ -939,6 +1017,57 @@ class RelativeFieldTests(SimpleTestCase): ], ) + def test_to_fields_with_composite_primary_key(self): + class Parent(models.Model): + pk = models.CompositePrimaryKey("version", "name") + version = models.IntegerField() + name = models.CharField(max_length=20) + + class Child(models.Model): + a = models.IntegerField() + b = models.IntegerField() + parent = models.ForeignObject( + Parent, + on_delete=models.SET_NULL, + from_fields=("a", "b"), + to_fields=("pk", "version"), + ) + + field = Child._meta.get_field("parent") + self.assertEqual( + field.check(), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + + def test_to_field_to_composite_primery_key(self): + class Parent(models.Model): + pk = models.CompositePrimaryKey("version", "name") + version = models.IntegerField() + name = models.CharField(max_length=20) + + class Child(models.Model): + parent = models.ForeignKey(Parent, on_delete=models.CASCADE, to_field="pk") + + field = Child._meta.get_field("parent") + self.assertEqual( + field.check(), + [ + Error( + "Field defines a relation to the CompositePrimaryKey of model " + "'Parent' which is not supported.", + obj=field, + id="fields.E347", + ), + ], + ) + def test_invalid_related_query_name(self): class Target(models.Model): pass |
