From c6ef30da0f55cde20d1d2f50b31adba7e3eee07d Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Mon, 4 May 2020 12:08:30 +0200 Subject: [PATCH] Fix behaviour of meta class and rename to django naming scheme --- aleksis/core/mixins.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 2f8093931..e66f113b4 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 -- GitLab