예제 #1
0
class EmployeeSerializer(DynamicFieldsModelSerializer):
    '''
    Serializer for employee with user info, groups basic info, depts basic info
    '''

    user = UserSerializer(source='*')
    groups = GroupSerializer(many=True, read_only=True)
    depts = DeptSerializer(many=True, read_only=True)

    nodes = serializers.SerializerMethodField()

    group_uids = serializers.PrimaryKeyRelatedField(
        queryset=Group.objects.all(),
        many=True,
        pk_field='uid',
        write_only=True,
        required=False)
    dept_uids = serializers.PrimaryKeyRelatedField(queryset=Dept.objects.all(),
                                                   many=True,
                                                   pk_field='uid',
                                                   write_only=True,
                                                   required=False)

    node_uids = serializers.PrimaryKeyRelatedField(
        queryset=Group.objects.all(),
        many=True,
        pk_field='uid',
        write_only=True,
        required=False)

    class Meta:  # pylint: disable=missing-docstring
        model = User

        fields = (
            'group_uids',
            'dept_uids',
            'node_uids',
            'user',
            'groups',
            'depts',
            'nodes',
        )

    def get_nodes(self, obj):  # pylint: disable=no-self-use
        '''
        groups + nodes
        '''
        for item in self.get_groups(obj):
            yield item

        for item in DeptSerializer(obj.depts, many=True).data:
            yield item

    def get_groups(self, obj):  # pylint: disable=no-self-use
        '''
        出于业务需要,extern 不予展示
        '''
        return GroupSerializer(
            [group for group in obj.groups if group.uid != 'extern'],
            many=True).data
예제 #2
0
    def get_nodes(self, obj):  # pylint: disable=no-self-use
        '''
        groups + nodes
        '''
        for item in self.get_groups(obj):
            yield item

        for item in DeptSerializer(obj.depts, many=True).data:
            yield item
예제 #3
0
 def get(self, request, *args, **kwargs):
     user = self.get_object()
     data = DeptSerializer(user.depts, many=True).data + \
         GroupSerializer(user.groups, many=True).data
     return Response({'nodes': data})