From 871a619be58f00ee8d85fd7ab74dcca78b04e95c Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 3 May 2020 18:28:06 +0200 Subject: [PATCH] Add lazy-wrapped syncable fields retriever --- aleksis/core/mixins.py | 7 +++++++ aleksis/core/preferences.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index e958c75f7..fa11c7cb1 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 ad356dd0a..95daabc51 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") -- GitLab