mirror of
https://github.com/django/django.git
synced 2025-08-03 02:23:12 +00:00
Refs #27666 -- Ensured relationship consistency on delayed reloads.
Delayed reloads of state models broke identity based relationships between direct and non-direct ancestors. Basing models.Options related objects map of model labels instead of their identity ensured relationship consistency is maintained. Refs #30966. Co-authored-by: Hasan Ramezani <hasan.r67@gmail.com>
This commit is contained in:
parent
e03eb8db93
commit
1d16c5d562
2 changed files with 27 additions and 2 deletions
|
@ -532,6 +532,30 @@ class StateTests(SimpleTestCase):
|
|||
project_state.add_model(ModelState.from_model(B))
|
||||
self.assertEqual(len(project_state.apps.get_models()), 2)
|
||||
|
||||
def test_reload_model_relationship_consistency(self):
|
||||
project_state = ProjectState()
|
||||
project_state.add_model(ModelState('migrations', 'A', []))
|
||||
project_state.add_model(ModelState('migrations', 'B', [
|
||||
('a', models.ForeignKey('A', models.CASCADE)),
|
||||
]))
|
||||
project_state.add_model(ModelState('migrations', 'C', [
|
||||
('b', models.ForeignKey('B', models.CASCADE)),
|
||||
]))
|
||||
A = project_state.apps.get_model('migrations.A')
|
||||
B = project_state.apps.get_model('migrations.B')
|
||||
C = project_state.apps.get_model('migrations.C')
|
||||
self.assertEqual([r.related_model for r in A._meta.related_objects], [B])
|
||||
self.assertEqual([r.related_model for r in B._meta.related_objects], [C])
|
||||
self.assertEqual([r.related_model for r in C._meta.related_objects], [])
|
||||
|
||||
project_state.reload_model('migrations', 'a', delay=True)
|
||||
A = project_state.apps.get_model('migrations.A')
|
||||
B = project_state.apps.get_model('migrations.B')
|
||||
C = project_state.apps.get_model('migrations.C')
|
||||
self.assertEqual([r.related_model for r in A._meta.related_objects], [B])
|
||||
self.assertEqual([r.related_model for r in B._meta.related_objects], [C])
|
||||
self.assertEqual([r.related_model for r in C._meta.related_objects], [])
|
||||
|
||||
def test_add_relations(self):
|
||||
"""
|
||||
#24573 - Adding relations to existing models should reload the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue