Browse Source

add preference

master
alireza 1 year ago
parent
commit
e1f5d38dc4
  1. 32
      dynamic_preferences/admin.py
  2. 3
      dynamic_preferences/dynamic_preferences_registry.py

32
dynamic_preferences/admin.py

@ -8,6 +8,8 @@ from .models import GlobalPreferenceModel
from .forms import GlobalSinglePreferenceForm, SinglePerInstancePreferenceForm from .forms import GlobalSinglePreferenceForm, SinglePerInstancePreferenceForm
from django.utils.translation import gettext_lazy as _ 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): class SectionFilter(admin.AllValuesFieldListFilter):
def __init__(self, field, request, params, model, model_admin, field_path): def __init__(self, field, request, params, model, model_admin, field_path):
@ -40,7 +42,8 @@ class SectionFilter(admin.AllValuesFieldListFilter):
yield choice yield choice
class DynamicPreferenceAdmin(AjaxDatatable):
# Change DynamicPreferenceAdmin to inherit from unfold's ModelAdmin
class DynamicPreferenceAdmin(ModelAdmin):
list_display = ( list_display = (
"verbose_name", "verbose_name",
"help_text", "help_text",
@ -48,7 +51,11 @@ class DynamicPreferenceAdmin(AjaxDatatable):
fields = ("raw_value", "default_value",) fields = ("raw_value", "default_value",)
readonly_fields = ("default_value",) readonly_fields = ("default_value",)
change_form_template = "dynamic_preferences/dyna_change_form.html" change_form_template = "dynamic_preferences/dyna_change_form.html"
# Unfold specific settings
search_fields = ["name", "section"]
list_filter = ["section"]
@admin.display(description=_('Verbose name')) @admin.display(description=_('Verbose name'))
def verbose_name(self, obj): def verbose_name(self, obj):
return obj.verbose_name return obj.verbose_name
@ -94,6 +101,21 @@ class DynamicPreferenceAdmin(AjaxDatatable):
class GlobalPreferenceAdmin(DynamicPreferenceAdmin): class GlobalPreferenceAdmin(DynamicPreferenceAdmin):
form = GlobalSinglePreferenceForm form = GlobalSinglePreferenceForm
changelist_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): def get_queryset(self, *args, **kwargs):
# Instanciate default prefs # Instanciate default prefs
@ -102,7 +124,10 @@ class GlobalPreferenceAdmin(DynamicPreferenceAdmin):
return super(GlobalPreferenceAdmin, self).get_queryset(*args, **kwargs) return super(GlobalPreferenceAdmin, self).get_queryset(*args, **kwargs)
admin.site.register(GlobalPreferenceModel, GlobalPreferenceAdmin)
project_admin_site.register(GlobalPreferenceModel, GlobalPreferenceAdmin)
class PerInstancePreferenceAdmin(DynamicPreferenceAdmin): class PerInstancePreferenceAdmin(DynamicPreferenceAdmin):
@ -112,3 +137,4 @@ class PerInstancePreferenceAdmin(DynamicPreferenceAdmin):
form = SinglePerInstancePreferenceForm form = SinglePerInstancePreferenceForm
changelist_form = SinglePerInstancePreferenceForm changelist_form = SinglePerInstancePreferenceForm
list_select_related = True list_select_related = True

3
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, \ from dynamic_preferences.types import BasePreferenceType, BaseSerializer, LongStringPreference, StringPreference, \
FilePreference FilePreference
from utils.json_editor_field import JsonEditorWidget from utils.json_editor_field import JsonEditorWidget
from unfold.contrib.forms.widgets import WysiwygWidget
class EditorPreferences(LongStringPreference): class EditorPreferences(LongStringPreference):
widget = TinyWidget(attrs={'class': 'editor-field'})
widget = WysiwygWidget(attrs={'class': 'editor-field'})
@global_preferences_registry.register @global_preferences_registry.register

Loading…
Cancel
Save