diff options
| author | Simon Charette <charette.s@gmail.com> | 2015-11-09 16:50:40 -0500 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2015-11-14 12:08:33 -0500 |
| commit | c049c43e28a3e46eaed13bb8e018b221250a0145 (patch) | |
| tree | 50a70fa2b0d836a2bb5b7dfb53fa0656fb165756 /tests/invalid_models_tests/test_relative_fields.py | |
| parent | 84006fda55ffcaf272ca4fcd4addf7874302e884 (diff) | |
[1.9.x] Fixed #25723 -- Made related field checks lookup against their local apps.
Backport of c550beb0ccc8855fde7ff50ada530f7ceff1a595 from master
Diffstat (limited to 'tests/invalid_models_tests/test_relative_fields.py')
| -rw-r--r-- | tests/invalid_models_tests/test_relative_fields.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py index bfdd2b7d7a..3ec9af2cb0 100644 --- a/tests/invalid_models_tests/test_relative_fields.py +++ b/tests/invalid_models_tests/test_relative_fields.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import warnings +from django.apps.registry import Apps from django.core.checks import Error, Warning as DjangoWarning from django.db import models from django.db.models.fields.related import ForeignObject @@ -132,6 +133,26 @@ class RelativeFieldTests(IsolatedModelsTestCase): ] self.assertEqual(errors, expected) + def test_foreign_key_to_isolated_apps_model(self): + """ + #25723 - Referenced model registration lookup should be run against the + field's model registry. + """ + test_apps = Apps(['invalid_models_tests']) + + class OtherModel(models.Model): + class Meta: + apps = test_apps + + class Model(models.Model): + foreign_key = models.ForeignKey('OtherModel', models.CASCADE) + + class Meta: + apps = test_apps + + field = Model._meta.get_field('foreign_key') + self.assertEqual(field.check(from_model=Model), []) + def test_many_to_many_to_missing_model(self): class Model(models.Model): m2m = models.ManyToManyField("Rel2") @@ -149,6 +170,26 @@ class RelativeFieldTests(IsolatedModelsTestCase): ] self.assertEqual(errors, expected) + def test_many_to_many_to_isolated_apps_model(self): + """ + #25723 - Referenced model registration lookup should be run against the + field's model registry. + """ + test_apps = Apps(['invalid_models_tests']) + + class OtherModel(models.Model): + class Meta: + apps = test_apps + + class Model(models.Model): + m2m = models.ManyToManyField('OtherModel') + + class Meta: + apps = test_apps + + field = Model._meta.get_field('m2m') + self.assertEqual(field.check(from_model=Model), []) + def test_many_to_many_with_useless_options(self): class Model(models.Model): name = models.CharField(max_length=20) @@ -288,6 +329,33 @@ class RelativeFieldTests(IsolatedModelsTestCase): ] self.assertEqual(errors, expected) + def test_many_to_many_through_isolated_apps_model(self): + """ + #25723 - Through model registration lookup should be run against the + field's model registry. + """ + test_apps = Apps(['invalid_models_tests']) + + class GroupMember(models.Model): + person = models.ForeignKey('Person', models.CASCADE) + group = models.ForeignKey('Group', models.CASCADE) + + class Meta: + apps = test_apps + + class Person(models.Model): + class Meta: + apps = test_apps + + class Group(models.Model): + members = models.ManyToManyField('Person', through='GroupMember') + + class Meta: + apps = test_apps + + field = Group._meta.get_field('members') + self.assertEqual(field.check(from_model=Group), []) + def test_symmetrical_self_referential_field(self): class Person(models.Model): # Implicit symmetrical=False. |
