From 48cf7516409c668bf11e24e6b7cd8eaea13ae3b8 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Mon, 22 Feb 2016 16:05:47 -0500 Subject: [1.9.x] Fixed #26186 -- Documented how app relative relationships of abstract models behave. This partially reverts commit bc7d201bdbaeac14a49f51a9ef292d6312b4c45e. Thanks Tim for the review. Refs #25858. Backport of 0223e213dd690b6b6e0669f836a20efb10998c83 from master --- tests/model_fields/tests.py | 66 ++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 28 deletions(-) (limited to 'tests/model_fields') diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 5aafdb2844..cc6639b032 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -251,24 +251,29 @@ class ForeignKeyTests(test.TestCase): def test_abstract_model_app_relative_foreign_key(self): test_apps = Apps(['model_fields', 'model_fields.tests']) - class Refered(models.Model): - class Meta: - apps = test_apps - app_label = 'model_fields' - class AbstractReferent(models.Model): reference = models.ForeignKey('Refered', on_delete=models.CASCADE) class Meta: + apps = test_apps app_label = 'model_fields' abstract = True - class ConcreteReferent(AbstractReferent): - class Meta: - apps = test_apps - app_label = 'tests' + def assert_app_model_resolved(label): + class Refered(models.Model): + class Meta: + apps = test_apps + app_label = label + + class ConcreteReferent(AbstractReferent): + class Meta: + apps = test_apps + app_label = label + + self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered) - self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered) + assert_app_model_resolved('model_fields') + assert_app_model_resolved('tests') class ManyToManyFieldTests(test.SimpleTestCase): @@ -295,33 +300,38 @@ class ManyToManyFieldTests(test.SimpleTestCase): def test_abstract_model_app_relative_foreign_key(self): test_apps = Apps(['model_fields', 'model_fields.tests']) - class Refered(models.Model): + class AbstractReferent(models.Model): + reference = models.ManyToManyField('Refered', through='Through') + class Meta: apps = test_apps app_label = 'model_fields' + abstract = True - class Through(models.Model): - refered = models.ForeignKey('Refered', on_delete=models.CASCADE) - referent = models.ForeignKey('tests.ConcreteReferent', on_delete=models.CASCADE) + def assert_app_model_resolved(label): + class Refered(models.Model): + class Meta: + apps = test_apps + app_label = label - class Meta: - apps = test_apps - app_label = 'model_fields' + class Through(models.Model): + refered = models.ForeignKey('Refered', on_delete=models.CASCADE) + referent = models.ForeignKey('ConcreteReferent', on_delete=models.CASCADE) - class AbstractReferent(models.Model): - reference = models.ManyToManyField('Refered', through='Through') + class Meta: + apps = test_apps + app_label = label - class Meta: - app_label = 'model_fields' - abstract = True + class ConcreteReferent(AbstractReferent): + class Meta: + apps = test_apps + app_label = label - class ConcreteReferent(AbstractReferent): - class Meta: - apps = test_apps - app_label = 'tests' + self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered) + self.assertEqual(ConcreteReferent.reference.through, Through) - self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered) - self.assertEqual(ConcreteReferent.reference.through, Through) + assert_app_model_resolved('model_fields') + assert_app_model_resolved('tests') class TextFieldTests(test.TestCase): -- cgit v1.3