diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 856187d79a5735616a5ba3f2abb65a8fc82e8f7d..7f5db6e6d1bb4c17ece7152167ef35334b22c115 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -17,8 +17,25 @@ from material.base import Layout, LayoutNode from rules.contrib.admin import ObjectPermissionsModelAdmin -@reversion.register -class ExtensibleModel(models.Model): +class _ExtensibleModelBase(models.base.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): + mcls = super().__new__(mcls, name, bases, attrs) + + if "Meta" not in attrs or not attrs["Meta"].abstract: + # Register all non-abstract models with django-reversion + mcls = reversion.register(mcls) + + return mcls + + +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 @@ -212,8 +229,8 @@ class PureDjangoModel(object): class _ExtensibleFormMetaclass(ModelFormMetaclass): - def __new__(cls, mcs, name, bases, dct): - x = super().__new__(mcs, name, bases, dct) + def __new__(cls, name, bases, dct): + x = super().__new__(cls, name, bases, dct) # Enforce a default for the base layout for forms that o not specify one if hasattr(x, "layout"): diff --git a/aleksis/core/util/notifications.py b/aleksis/core/util/notifications.py index 499de67b9fba6513e680d6bd6354505b83396b49..33b92251b302c3f8051a13b4dc39b77d4676ce5a 100644 --- a/aleksis/core/util/notifications.py +++ b/aleksis/core/util/notifications.py @@ -10,7 +10,6 @@ from django.utils.translation import gettext_lazy as _ from templated_email import send_templated_mail -from ..models import Notification from .core_helpers import lazy_preference try: