Fixed #25858 -- Bound abstract model application relative relationships.

Thanks to Karl Hobley for the report and Markus, Shai, Aymeric for their input
and Tim for the review.
This commit is contained in:
Simon Charette 2016-01-09 18:05:57 -05:00
parent 2ed2db2ea3
commit bc7d201bdb
3 changed files with 63 additions and 6 deletions

View file

@ -251,6 +251,25 @@ class ForeignKeyTests(test.TestCase):
"Pending lookup added for a foreign key on an abstract model"
)
@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)
class Meta:
app_label = 'model_fields'
abstract = True
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = 'tests'
self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered)
class ManyToManyFieldTests(test.SimpleTestCase):
def test_abstract_model_pending_operations(self):
@ -273,6 +292,30 @@ class ManyToManyFieldTests(test.SimpleTestCase):
"Pending lookup added for a many-to-many field on an abstract model"
)
@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')
class Meta:
app_label = 'model_fields'
abstract = True
class ConcreteReferent(AbstractReferent):
class Meta:
app_label = 'tests'
self.assertEqual(ConcreteReferent._meta.get_field('reference').related_model, Refered)
self.assertEqual(ConcreteReferent.reference.through, Through)
class TextFieldTests(test.TestCase):
def test_to_python(self):