From 1771194bdd456ed93566f77813ff0c7c29f0d52f Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 20 Mar 2017 14:12:03 +0100 Subject: [PATCH] api: add support for custom rest_framework fields to attribute kinds (fixes #15608) --- src/authentic2/api_views.py | 8 +++++--- src/authentic2/attribute_kinds.py | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index 2b6bf9d..5ed9ff5 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -23,7 +23,7 @@ from rest_framework.exceptions import PermissionDenied from rest_framework.fields import CreateOnlyDefault from .custom_user.models import User -from . import utils, decorators +from . import utils, decorators, attribute_kinds from .models import Attribute, PasswordReset from .a2_rbac.utils import get_default_ou @@ -278,8 +278,10 @@ class BaseUserSerializer(serializers.ModelSerializer): for at in Attribute.objects.all(): if at.name in self.fields: continue - self.fields[at.name] = serializers.CharField(source='attributes.%s' % at.name, - required=at.required, allow_blank=True) + kind = attribute_kinds.get_kind(at.kind) + field_class = kind['rest_framework_field_class'] + self.fields[at.name] = field_class(source='attributes.%s' % at.name, + required=at.required, allow_blank=True) def check_perm(self, perm, ou): self.context['view'].check_perm(perm, ou) diff --git a/src/authentic2/attribute_kinds.py b/src/authentic2/attribute_kinds.py index 9e37fde..b29b6b5 100644 --- a/src/authentic2/attribute_kinds.py +++ b/src/authentic2/attribute_kinds.py @@ -10,6 +10,8 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy from django.utils.functional import allow_lazy from django.template.defaultfilters import capfirst +from rest_framework import serializers + from .decorators import to_iter from .plugins import collect_from_plugins from . import app_settings @@ -109,4 +111,5 @@ def get_kind(kind): d.setdefault('default', None) d.setdefault('serialize', lambda x: x) d.setdefault('deserialize', lambda x: x) + d.setdefault('rest_framework_field_class', serializers.CharField) return d -- 2.1.4