소스 검색

Fixed #25852 -- Made sure AlterModelManager forces a reload of its model state.

Thanks to Geoffrey Sechter and the Django NYC group for the report and Markus
for the review.
Simon Charette 9 년 전
부모
커밋
c4e372aaf4
4개의 변경된 파일12개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      django/db/migrations/operations/models.py
  2. 3 0
      docs/releases/1.8.8.txt
  3. 3 0
      docs/releases/1.9.1.txt
  4. 5 0
      tests/migrations/test_operations.py

+ 1 - 0
django/db/migrations/operations/models.py

@@ -590,6 +590,7 @@ class AlterModelManagers(Operation):
     def state_forwards(self, app_label, state):
         model_state = state.models[app_label, self.name_lower]
         model_state.managers = list(self.managers)
+        state.reload_model(app_label, self.name_lower)
 
     def database_forwards(self, app_label, schema_editor, from_state, to_state):
         pass

+ 3 - 0
docs/releases/1.8.8.txt

@@ -34,3 +34,6 @@ Bugfixes
 * Fixed missing ``varchar/text_pattern_ops`` index on ``CharField`` and
   ``TextField`` respectively when using ``AlterField`` on PostgreSQL
   (:ticket:`25412`).
+
+* Fixed a state bug when using an ``AlterModelManagers`` operation
+  (:ticket:`25852`).

+ 3 - 0
docs/releases/1.9.1.txt

@@ -40,3 +40,6 @@ Bugfixes
 
 * Fixed evaluation of zero-length slices of ``QuerySet.values()``
   (:ticket:`25894`).
+
+* Fixed a state bug when using an ``AlterModelManagers`` operation
+  (:ticket:`25852`).

+ 5 - 0
tests/migrations/test_operations.py

@@ -1393,6 +1393,11 @@ class OperationTests(OperationTestBase):
         self.assertEqual(managers[2][0], "food_mgr_kwargs")
         self.assertIsInstance(managers[2][1], FoodManager)
         self.assertEqual(managers[2][1].args, ("x", "y", 3, 4))
+        rendered_state = new_state.apps
+        model = rendered_state.get_model('test_almoma', 'pony')
+        self.assertIsInstance(model.food_qs, models.Manager)
+        self.assertIsInstance(model.food_mgr, FoodManager)
+        self.assertIsInstance(model.food_mgr_kwargs, FoodManager)
 
     def test_alter_model_managers_emptying(self):
         """