from django.conf import settings from django import forms from dynamic_preferences import serializers from dynamic_preferences import types from dynamic_preferences.registries import global_preferences_registry class DefaultFromSettingMixin(object): def get_default(self): return getattr(settings, self.setting) def get(pref): manager = global_preferences_registry.manager() return manager[pref] class StringListSerializer(serializers.BaseSerializer): separator = ',' sort = True @classmethod def to_db(cls, value, **kwargs): if not value: return if type(value) not in [list, tuple]: raise cls.exception( "Cannot serialize, value {} is not a list or a tuple".format( value)) if cls.sort: value = sorted(value) return cls.separator.join(value) @classmethod def to_python(cls, value, **kwargs): if not value: return [] return value.split(',') class StringListPreference(types.BasePreferenceType): serializer = StringListSerializer field_class = forms.MultipleChoiceField def get_api_additional_data(self): d = super(StringListPreference, self).get_api_additional_data() d['choices'] = self.get('choices') return d