diff --git a/dynamic_preferences/admin.py b/dynamic_preferences/admin.py index 496ae81..a87dceb 100644 --- a/dynamic_preferences/admin.py +++ b/dynamic_preferences/admin.py @@ -8,6 +8,8 @@ from .models import GlobalPreferenceModel from .forms import GlobalSinglePreferenceForm, SinglePerInstancePreferenceForm from django.utils.translation import gettext_lazy as _ +from unfold.admin import ModelAdmin, TabularInline +from utils.admin import project_admin_site class SectionFilter(admin.AllValuesFieldListFilter): def __init__(self, field, request, params, model, model_admin, field_path): @@ -40,7 +42,8 @@ class SectionFilter(admin.AllValuesFieldListFilter): yield choice -class DynamicPreferenceAdmin(AjaxDatatable): +# Change DynamicPreferenceAdmin to inherit from unfold's ModelAdmin +class DynamicPreferenceAdmin(ModelAdmin): list_display = ( "verbose_name", "help_text", @@ -48,7 +51,11 @@ class DynamicPreferenceAdmin(AjaxDatatable): fields = ("raw_value", "default_value",) readonly_fields = ("default_value",) change_form_template = "dynamic_preferences/dyna_change_form.html" - + + # Unfold specific settings + search_fields = ["name", "section"] + list_filter = ["section"] + @admin.display(description=_('Verbose name')) def verbose_name(self, obj): return obj.verbose_name @@ -94,6 +101,21 @@ class DynamicPreferenceAdmin(AjaxDatatable): class GlobalPreferenceAdmin(DynamicPreferenceAdmin): form = GlobalSinglePreferenceForm changelist_form = GlobalSinglePreferenceForm + + # Unfold specific customizations + list_display_links = ["verbose_name"] + + # You can add unfold specific features like: + show_facets = True # Enable faceted filtering + + # Optional: Add custom actions + actions = ["reset_to_default"] + + def reset_to_default(self, request, queryset): + for pref in queryset: + manager = pref.registry.manager() + manager.update_db_pref(pref.section, pref.name, pref.preference.default) + reset_to_default.short_description = _("Reset selected preferences to default values") def get_queryset(self, *args, **kwargs): # Instanciate default prefs @@ -102,7 +124,10 @@ class GlobalPreferenceAdmin(DynamicPreferenceAdmin): return super(GlobalPreferenceAdmin, self).get_queryset(*args, **kwargs) -admin.site.register(GlobalPreferenceModel, GlobalPreferenceAdmin) + + + +project_admin_site.register(GlobalPreferenceModel, GlobalPreferenceAdmin) class PerInstancePreferenceAdmin(DynamicPreferenceAdmin): @@ -112,3 +137,4 @@ class PerInstancePreferenceAdmin(DynamicPreferenceAdmin): form = SinglePerInstancePreferenceForm changelist_form = SinglePerInstancePreferenceForm list_select_related = True + diff --git a/dynamic_preferences/dynamic_preferences_registry.py b/dynamic_preferences/dynamic_preferences_registry.py index edc1dad..9e05574 100644 --- a/dynamic_preferences/dynamic_preferences_registry.py +++ b/dynamic_preferences/dynamic_preferences_registry.py @@ -10,10 +10,11 @@ from dynamic_preferences.registries import global_preferences_registry from dynamic_preferences.types import BasePreferenceType, BaseSerializer, LongStringPreference, StringPreference, \ FilePreference from utils.json_editor_field import JsonEditorWidget +from unfold.contrib.forms.widgets import WysiwygWidget class EditorPreferences(LongStringPreference): - widget = TinyWidget(attrs={'class': 'editor-field'}) + widget = WysiwygWidget(attrs={'class': 'editor-field'}) @global_preferences_registry.register