# coding: utf-8 # from django.db.models import Count from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ from common.serializers import AdaptedBulkListSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer from .. import models __all__ = [ 'DatabaseAppPermissionSerializer', 'DatabaseAppPermissionListSerializer' ] class AmountMixin: @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """ queryset = queryset.annotate( users_amount=Count('users', distinct=True), user_groups_amount=Count('user_groups', distinct=True), database_apps_amount=Count('database_apps', distinct=True), system_users_amount=Count('system_users', distinct=True) ) return queryset class DatabaseAppPermissionSerializer(AmountMixin, BulkOrgResourceModelSerializer): class Meta: model = models.DatabaseAppPermission list_serializer_class = AdaptedBulkListSerializer fields = [ 'id', 'name', 'users', 'user_groups', 'database_apps', 'system_users', 'comment', 'is_active', 'date_start', 'date_expired', 'is_valid', 'created_by', 'date_created', 'users_amount', 'user_groups_amount', 'database_apps_amount', 'system_users_amount', ] read_only_fields = [ 'created_by', 'date_created', 'users_amount', 'user_groups_amount', 'database_apps_amount', 'system_users_amount', ] extra_kwargs = { 'is_valid': {'label': _('Is valid')}, 'users_amount': {'label': _('Users amount')}, 'user_groups_amount': {'label': _('User groups amount')}, 'system_users_amount': {'label': _('System users amount')}, 'database_apps_amount': {'label': _('Database apps amount')}, } class DatabaseAppPermissionListSerializer(AmountMixin, BulkOrgResourceModelSerializer): is_expired = serializers.BooleanField() class Meta: model = models.DatabaseAppPermission fields = [ 'id', 'name', 'comment', 'is_active', 'users_amount', 'user_groups_amount', 'date_start', 'date_expired', 'is_valid', 'database_apps_amount', 'system_users_amount', 'created_by', 'date_created', 'is_expired' ] extra_kwargs = { 'is_valid': {'label': _('Is valid')}, 'users_amount': {'label': _('Users amount')}, 'user_groups_amount': {'label': _('User groups amount')}, 'system_users_amount': {'label': _('System users amount')}, 'database_apps_amount': {'label': _('Database apps amount')}, }