diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 2f80939317ef4cccd1752b2e0ff358e1338b5a8d..e66f113b47368d1620dbfbb2b21e8aa0b0f0cd66 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -17,16 +17,23 @@ from material.base import Layout, LayoutNode from rules.contrib.admin import ObjectPermissionsModelAdmin -class ExtensibleModelVersioning(type): - """Meta class to add django-reversion decorator.""" +class _ExtensibleModelBase(models.ModelBase): + """Ensure predefined behaviour on model creation. + + This metaclass serves the following purposes: + + - Register all AlekSIS models with django-reverseion + """ def __new__(mcls, name, bases, attrs): - if not mcls["Meta"].abstract: - return reversion.register(super().__new__, (name, bases, attrs)) - else: - return + mcls = super().__new__(name, bases, attrs) + + if "Meta" not in attrs or not attrs["Meta"].abstract: + # Register all non-abstract models with django-reversion + mcls = reversion.register(super().__new__(name, bases, attrs)) + -class ExtensibleModel(models.Model, metaclass=ExtensibleModelVersioning): +class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): """Base model for all objects in AlekSIS apps. This base model ensures all objects in AlekSIS apps fulfill the