documentation, fixed variable name

MK/conditional_fields
mariusrklein 4 months ago
parent c7d1a16cb3
commit 2ef737f751

@ -179,19 +179,25 @@ class CommonAdminMixin(FieldPermissionsAdminMixin, ChangeViewAdminMixin, Filtere
@property @property
def field_key(self): def field_key(self):
"""returns the key to look if model has custom fields in settings"""
return f"{self.model._meta.app_label}_{self.model.__name__}".lower() return f"{self.model._meta.app_label}_{self.model.__name__}".lower()
def get_excluded_fields(self): def get_excluded_fields(self):
"""if model has custom excluded fields in settings, return them as a set"""
return OrderedSet(settings.CUSTOM_MODEL_FIELDS.get(self.field_key, {}).get('exclude', [])) return OrderedSet(settings.CUSTOM_MODEL_FIELDS.get(self.field_key, {}).get('exclude', []))
def get_included_fields(self): def get_included_fields(self):
"""if model has an entire custom fieldset in settings, return it as a set"""
return OrderedSet(settings.CUSTOM_MODEL_FIELDS.get(self.field_key, {}).get('fields', [])) return OrderedSet(settings.CUSTOM_MODEL_FIELDS.get(self.field_key, {}).get('fields', []))
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
"""filter fieldsets according to included and excluded fields in settings"""
# get original fields and user-defined included and excluded fields
original_fieldsets = super().get_fieldsets(request, obj)
included = self.get_included_fields() included = self.get_included_fields()
excluded = self.get_excluded_fields() excluded = self.get_excluded_fields()
original_fieldsets = super().get_fieldsets(request, obj)
if original_fieldsets: if original_fieldsets:
print(f"get_fieldsets called for {self.field_key}") print(f"get_fieldsets called for {self.field_key}")
print(f"Original fieldsets: {original_fieldsets}") print(f"Original fieldsets: {original_fieldsets}")
@ -218,6 +224,7 @@ class CommonAdminMixin(FieldPermissionsAdminMixin, ChangeViewAdminMixin, Filtere
def get_fields(self, request, obj=None): def get_fields(self, request, obj=None):
"""filter fields according to included and excluded fields in settings"""
fields = OrderedSet(super().get_fields(request, obj) or []) fields = OrderedSet(super().get_fields(request, obj) or [])
custom_fields = self.get_included_fields() - self.get_excluded_fields() custom_fields = self.get_included_fields() - self.get_excluded_fields()
if custom_fields: if custom_fields:
@ -226,6 +233,7 @@ class CommonAdminMixin(FieldPermissionsAdminMixin, ChangeViewAdminMixin, Filtere
return list(fields) return list(fields)
def get_exclude(self, request, obj=None): def get_exclude(self, request, obj=None):
"""filter excluded fields according to included and excluded fields in settings"""
excluded = OrderedSet(super().get_exclude(request, obj) or []) excluded = OrderedSet(super().get_exclude(request, obj) or [])
custom_excluded = self.get_excluded_fields() - self.get_included_fields() custom_excluded = self.get_excluded_fields() - self.get_included_fields()
if custom_excluded: if custom_excluded:

@ -80,4 +80,4 @@ TEST_MAIL = get_var('testing', 'mail', default='test@localhost')
# excluded and included model fields in admin and admin forms # excluded and included model fields in admin and admin forms
CUSTOM_MODELS = list(get_var('custom_model_fields', default={}).keys()) CUSTOM_MODELS = list(get_var('custom_model_fields', default={}).keys())
CUSTOM_MODEL_FIELDS = {model.lower(): get_var('model_fields', model, default=[]) for model in CUSTOM_MODELS} CUSTOM_MODEL_FIELDS = {model.lower(): get_var('custom_model_fields', model, default={}) for model in CUSTOM_MODELS}
Loading…
Cancel
Save