from constance import config from constance.admin import get_values, ConstanceForm from rest_framework import serializers from rest_framework.fields import SkipField from collections import OrderedDict def _set_constance_value(key, value): form = ConstanceForm(initial=get_values()) field = form.fields[key] clean_value = field.clean(field.to_python(value)) setattr(config, key, clean_value) class ConfigSerializer(serializers.Serializer): SERVICE_COMMISSION = serializers.IntegerField(required=False) SERVICE_DISCOUNT_MIN_AMOUNT = serializers.IntegerField(required=False) SERVICE_DISCOUNT = serializers.IntegerField(required=False) INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False) INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False) INSTAGRAM_PROFILE_URL = serializers.CharField(required=False) # SCHOOL_LOGO_IMAGE = serializers.ImageField(required=False) def to_representation(self, instance): ret = OrderedDict() fields = self._readable_fields for field in fields: attribute = instance.get(field.field_name) ret[field.field_name] = field.to_representation(attribute) return ret def to_internal_value(self, data): ret = OrderedDict(get_values()) for k, v in data.items(): ret[k] = v return ret def update(self, instance, validated_data): for k, v in validated_data.items(): _set_constance_value(k, v)