Browse Source

Use ObjectTypeRegistry for log entry model registry

Matt Westcott 3 năm trước cách đây
mục cha
commit
bd8d48be96
1 tập tin đã thay đổi với 4 bổ sung7 xóa
  1. 4 7
      wagtail/core/log_actions.py

+ 4 - 7
wagtail/core/log_actions.py

@@ -4,6 +4,7 @@ from asgiref.local import Local
 from django.utils.functional import LazyObject
 
 from wagtail.core import hooks
+from wagtail.utils.registry import ObjectTypeRegistry
 
 
 class LogFormatter:
@@ -86,7 +87,7 @@ class LogActionRegistry:
         self.choices = []
 
         # Tracks which LogEntry model should be used for a given object class
-        self.log_entry_models_by_type = {}
+        self.log_entry_models_by_type = ObjectTypeRegistry()
 
         # All distinct log entry models registered with register_model
         self.log_entry_models = set()
@@ -99,7 +100,7 @@ class LogActionRegistry:
             self.has_scanned_for_actions = True
 
     def register_model(self, cls, log_entry_model):
-        self.log_entry_models_by_type[cls] = log_entry_model
+        self.log_entry_models_by_type.register(cls, value=log_entry_model)
         self.log_entry_models.add(log_entry_model)
 
     def register_action(self, action, *args):
@@ -142,11 +143,7 @@ class LogActionRegistry:
 
     def get_log_model_for_model(self, model):
         self.scan_for_actions()
-
-        for cls in model.__mro__:
-            log_entry_model = self.log_entry_models_by_type.get(cls)
-            if log_entry_model:
-                return log_entry_model
+        return self.log_entry_models_by_type.get_by_type(model)
 
     def get_log_model_for_instance(self, instance):
         if isinstance(instance, LazyObject):