diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index e958c75f7ef56f837ee2f7137950dfb061690837..fa11c7cb1af486be694ff8d683e45ccfb76eb654 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -7,6 +7,7 @@ from django.contrib.sites.models import Site from django.db import models from django.db.models import QuerySet from django.forms.models import ModelForm, ModelFormMetaclass +from django.utils.functional import lazy import reversion from easyaudit.models import CRUDEvent @@ -196,6 +197,12 @@ class ExtensibleModel(models.Model): [(field.name, field.verbose_name or field.name) for field in cls.syncable_fields()] ) + @classmethod + def syncable_fields_choices_lazy(cls) -> callable[[], Tuple[Tuple[str, str]]]: + """ Collect all fields that can be synced on a model """ + + return lazy(cls.syncable_field_choices, tuple) + class Meta: abstract = True diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py index ad356dd0a66a181aebe27b35d940742c04eecf2e..95daabc5194c7bba089042ed7448aa94b263b5e5 100644 --- a/aleksis/core/preferences.py +++ b/aleksis/core/preferences.py @@ -157,7 +157,7 @@ class PrimaryGroupField(ChoicePreference): section = account name = "primary_group_field" default = "name" - choices = Person.syncable_fields_choices() + choices = Person.syncable_fields_choices_lazy() required = False verbose_name = _("Field on person to match primary group against")