mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Persist non-schema-relevant Meta changes in migrations
This commit is contained in:
		| @@ -44,6 +44,7 @@ class AutodetectorTests(TestCase): | ||||
|         ("publishers", models.ManyToManyField("testapp.Publisher")), | ||||
|     ]) | ||||
|     author_with_m2m_through = ModelState("testapp", "Author", [("id", models.AutoField(primary_key=True)), ("publishers", models.ManyToManyField("testapp.Publisher", through="testapp.Contract"))]) | ||||
|     author_with_options = ModelState("testapp", "Author", [("id", models.AutoField(primary_key=True))], {"verbose_name": "Authi", "permissions": [('can_hire', 'Can hire')]}) | ||||
|     contract = ModelState("testapp", "Contract", [("id", models.AutoField(primary_key=True)), ("author", models.ForeignKey("testapp.Author")), ("publisher", models.ForeignKey("testapp.Publisher"))]) | ||||
|     publisher = ModelState("testapp", "Publisher", [("id", models.AutoField(primary_key=True)), ("name", models.CharField(max_length=100))]) | ||||
|     publisher_with_author = ModelState("testapp", "Publisher", [("id", models.AutoField(primary_key=True)), ("author", models.ForeignKey("testapp.Author")), ("name", models.CharField(max_length=100))]) | ||||
| @@ -799,3 +800,17 @@ class AutodetectorTests(TestCase): | ||||
|         self.assertNumberMigrations(changes, "testapp", 1) | ||||
|         # Right actions in right order? | ||||
|         self.assertOperationTypes(changes, "testapp", 0, ["RemoveField", "RemoveField", "DeleteModel", "DeleteModel"]) | ||||
|  | ||||
|     def test_alter_model_options(self): | ||||
|         """ | ||||
|         If two models with a ForeignKey from one to the other are removed at the same time, | ||||
|         the autodetector should remove them in the correct order. | ||||
|         """ | ||||
|         before = self.make_project_state([self.author_empty]) | ||||
|         after = self.make_project_state([self.author_with_options]) | ||||
|         autodetector = MigrationAutodetector(before, after) | ||||
|         changes = autodetector._detect_changes() | ||||
|         # Right number of migrations? | ||||
|         self.assertNumberMigrations(changes, "testapp", 1) | ||||
|         # Right actions in right order? | ||||
|         self.assertOperationTypes(changes, "testapp", 0, ["AlterModelOptions"]) | ||||
|   | ||||
| @@ -790,6 +790,19 @@ class OperationTests(MigrationTestBase): | ||||
|             operation.database_backwards("test_alinto", editor, new_state, project_state) | ||||
|         self.assertIndexNotExists("test_alinto_pony", ["pink", "weight"]) | ||||
|  | ||||
|     def test_alter_model_options(self): | ||||
|         """ | ||||
|         Tests the AlterModelOptions operation. | ||||
|         """ | ||||
|         project_state = self.set_up_test_model("test_almoop") | ||||
|         # Test the state alteration (no DB alteration to test) | ||||
|         operation = migrations.AlterModelOptions("Pony", {"permissions": [("can_groom", "Can groom")]}) | ||||
|         new_state = project_state.clone() | ||||
|         operation.state_forwards("test_almoop", new_state) | ||||
|         self.assertEqual(len(project_state.models["test_almoop", "pony"].options.get("permissions", [])), 0) | ||||
|         self.assertEqual(len(new_state.models["test_almoop", "pony"].options.get("permissions", [])), 1) | ||||
|         self.assertEqual(new_state.models["test_almoop", "pony"].options["permissions"][0][0], "can_groom") | ||||
|  | ||||
|     @unittest.skipIf(sqlparse is None and connection.features.requires_sqlparse_for_splitting, "Missing sqlparse") | ||||
|     def test_run_sql(self): | ||||
|         """ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user