diff options
| author | jason_bruce <brucejwb@gmail.com> | 2024-07-05 14:41:01 -0400 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-07-09 13:50:12 +0200 |
| commit | af84bcc8d1b129bd2dc35fae6bb42a175143661f (patch) | |
| tree | 7444834ce0ad5948e7c1af30fc0427da73a9f27e | |
| parent | 759abc4dafef6860edb830c30754e6364ed9ea11 (diff) | |
Fixed #35580 -- Allowed related fields referencing auto-created through models.
| -rw-r--r-- | django/db/models/fields/related.py | 4 | ||||
| -rw-r--r-- | tests/invalid_models_tests/test_relative_fields.py | 17 |
2 files changed, 20 insertions, 1 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 8930d6ef4a..6737570074 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -187,7 +187,9 @@ class RelatedField(FieldCacheMixin, Field): return errors def _check_relation_model_exists(self): - rel_is_missing = self.remote_field.model not in self.opts.apps.get_models() + rel_is_missing = self.remote_field.model not in self.opts.apps.get_models( + include_auto_created=True + ) rel_is_string = isinstance(self.remote_field.model, str) model_name = ( self.remote_field.model diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py index e539d4e6fb..9b69ae4151 100644 --- a/tests/invalid_models_tests/test_relative_fields.py +++ b/tests/invalid_models_tests/test_relative_fields.py @@ -89,6 +89,23 @@ class RelativeFieldTests(SimpleTestCase): field = Model._meta.get_field("m2m") self.assertEqual(field.check(from_model=Model), []) + @isolate_apps("invalid_models_tests") + def test_auto_created_through_model(self): + class OtherModel(models.Model): + pass + + class M2MModel(models.Model): + many_to_many_rel = models.ManyToManyField(OtherModel) + + class O2OModel(models.Model): + one_to_one_rel = models.OneToOneField( + "invalid_models_tests.M2MModel_many_to_many_rel", + on_delete=models.CASCADE, + ) + + field = O2OModel._meta.get_field("one_to_one_rel") + self.assertEqual(field.check(from_model=O2OModel), []) + def test_many_to_many_with_useless_options(self): class Model(models.Model): name = models.CharField(max_length=20) |
