MCPcopy
hub / github.com/django/django / test_remove_relations

Method test_remove_relations

tests/migrations/test_state.py:750–801  ·  view source on GitHub ↗

#24225 - Relations between models are updated while remaining the relations and references for models of an old state.

(self)

Source from the content-addressed store, hash-verified

748 self.assertIs(model_c_new._meta.get_field("to_a").related_model, model_a_new)
749
750 def test_remove_relations(self):
751 """
752 #24225 - Relations between models are updated while
753 remaining the relations and references for models of an old state.
754 """
755 new_apps = Apps()
756
757 class A(models.Model):
758 class Meta:
759 app_label = "something"
760 apps = new_apps
761
762 class B(models.Model):
763 to_a = models.ForeignKey(A, models.CASCADE)
764
765 class Meta:
766 app_label = "something"
767 apps = new_apps
768
769 def get_model_a(state):
770 return [
771 mod for mod in state.apps.get_models() if mod._meta.model_name == "a"
772 ][0]
773
774 project_state = ProjectState()
775 project_state.add_model(ModelState.from_model(A))
776 project_state.add_model(ModelState.from_model(B))
777 self.assertEqual(len(get_model_a(project_state)._meta.related_objects), 1)
778 old_state = project_state.clone()
779
780 operation = RemoveField("b", "to_a")
781 operation.state_forwards("something", project_state)
782 # Model from old_state still has the relation
783 model_a_old = get_model_a(old_state)
784 model_a_new = get_model_a(project_state)
785 self.assertIsNot(model_a_old, model_a_new)
786 self.assertEqual(len(model_a_old._meta.related_objects), 1)
787 self.assertEqual(len(model_a_new._meta.related_objects), 0)
788
789 # Same test for deleted model
790 project_state = ProjectState()
791 project_state.add_model(ModelState.from_model(A))
792 project_state.add_model(ModelState.from_model(B))
793 old_state = project_state.clone()
794
795 operation = DeleteModel("b")
796 operation.state_forwards("something", project_state)
797 model_a_old = get_model_a(old_state)
798 model_a_new = get_model_a(project_state)
799 self.assertIsNot(model_a_old, model_a_new)
800 self.assertEqual(len(model_a_old._meta.related_objects), 1)
801 self.assertEqual(len(model_a_new._meta.related_objects), 0)
802
803 def test_self_relation(self):
804 """

Callers

nothing calls this directly

Calls 8

add_modelMethod · 0.95
cloneMethod · 0.95
state_forwardsMethod · 0.95
AppsClass · 0.90
ProjectStateClass · 0.90
RemoveFieldClass · 0.90
DeleteModelClass · 0.90
from_modelMethod · 0.80

Tested by

no test coverage detected