1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #26186 -- Documented how app relative relationships of abstract models behave.

This partially reverts commit bc7d201bdb.

Thanks Tim for the review.

Refs #25858.
This commit is contained in:
Simon Charette
2016-02-22 16:05:47 -05:00
parent eac1423f9e
commit 0223e213dd
4 changed files with 71 additions and 36 deletions

View File

@@ -254,10 +254,6 @@ class ForeignKeyTests(test.TestCase):
@isolate_apps('model_fields', 'model_fields.tests')
def test_abstract_model_app_relative_foreign_key(self):
class Refered(models.Model):
class Meta:
app_label = 'model_fields'
class AbstractReferent(models.Model):
reference = models.ForeignKey('Refered', on_delete=models.CASCADE)
@@ -265,11 +261,19 @@ class ForeignKeyTests(test.TestCase):
app_label = 'model_fields'
abstract = True
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = 'tests'
def assert_app_model_resolved(label):
class Refered(models.Model):
class Meta:
app_label = label
self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered)
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = label
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,14 +299,6 @@ class ManyToManyFieldTests(test.SimpleTestCase):
@isolate_apps('model_fields', 'model_fields.tests')
def test_abstract_model_app_relative_foreign_key(self):
class Refered(models.Model):
class Meta:
app_label = 'model_fields'
class Through(models.Model):
refered = models.ForeignKey('Refered', on_delete=models.CASCADE)
referent = models.ForeignKey('tests.ConcreteReferent', on_delete=models.CASCADE)
class AbstractReferent(models.Model):
reference = models.ManyToManyField('Refered', through='Through')
@@ -310,12 +306,27 @@ class ManyToManyFieldTests(test.SimpleTestCase):
app_label = 'model_fields'
abstract = True
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = 'tests'
def assert_app_model_resolved(label):
class Refered(models.Model):
class Meta:
app_label = label
self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered)
self.assertEqual(ConcreteReferent.reference.through, Through)
class Through(models.Model):
refered = models.ForeignKey('Refered', on_delete=models.CASCADE)
referent = models.ForeignKey('ConcreteReferent', on_delete=models.CASCADE)
class Meta:
app_label = label
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = label
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):