server/python/django2/renkanmanager/serializers.py
changeset 594 b45eb8244cd9
parent 593 2ff785d7026c
child 608 8fd40139827c
equal deleted inserted replaced
593:2ff785d7026c 594:b45eb8244cd9
     5 from django.conf import settings
     5 from django.conf import settings
     6 from guardian.shortcuts import assign_perm
     6 from guardian.shortcuts import assign_perm
     7 from renkanmanager.models import Renkan, Workspace, Revision
     7 from renkanmanager.models import Renkan, Workspace, Revision
     8 from rest_framework import serializers
     8 from rest_framework import serializers
     9 
     9 
       
    10 RENKAN_USER_DISPLAY_FIELD = getattr(settings, "RENKAN_USER_DISPLAY_FIELD", get_user_model().USERNAME_FIELD)
    10 
    11 
    11 class RenkanSerializer(serializers.Serializer):
    12 class RenkanSerializer(serializers.Serializer):
    12     id = serializers.ReadOnlyField(source="renkan_guid")
    13     id = serializers.ReadOnlyField(source="renkan_guid")
    13     current_revision_id = serializers.ReadOnlyField(source="current_revision_guid")
    14     current_revision_id = serializers.ReadOnlyField(source="current_revision_guid")
    14     workspace_id = serializers.CharField(source="workspace_guid", required=False)
    15     workspace_id = serializers.CharField(source="workspace_guid", required=False)
    15     source_revision_id = serializers.CharField(source="source_revision_guid", required=False)
    16     source_revision_id = serializers.CharField(source="source_revision_guid", required=False)
    16     revision_count = serializers.ReadOnlyField()
    17     revision_count = serializers.ReadOnlyField()
    17     created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True)
    18     created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
    18     last_updated_by = serializers.SerializerMethodField("get_current_revision_last_updator")
    19     last_updated_by = serializers.SerializerMethodField("get_current_revision_last_updator")
    19     title = serializers.CharField(required=False)
    20     title = serializers.CharField(required=False)
    20     content = serializers.JSONField(required=False)
    21     content = serializers.JSONField(required=False)
    21     creation_date = serializers.ReadOnlyField()
    22     creation_date = serializers.ReadOnlyField()
    22     modification_date = serializers.SerializerMethodField("get_current_revision_modification_date")
    23     modification_date = serializers.SerializerMethodField("get_current_revision_modification_date")
    23     create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating
    24     create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating
    24     
    25     
    25     # ADD ERROR HANDLING
    26     # ADD ERROR HANDLING
    26     def get_current_revision_last_updator(self, renkan):
    27     def get_current_revision_last_updator(self, renkan):
    27         current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid)
    28         current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid)
    28         return getattr(current_revision.last_updated_by, settings.RENKAN_USER_DISPLAY_FIELD)
    29         return getattr(current_revision.last_updated_by, RENKAN_USER_DISPLAY_FIELD)
    29     
    30     
    30     
    31     
    31     def get_current_revision_modification_date(self, renkan):
    32     def get_current_revision_modification_date(self, renkan):
    32         current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid)
    33         current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid)
    33         return current_revision.modification_date
    34         return current_revision.modification_date
   129     workspace_id = serializers.SerializerMethodField("get_related_workspace_guid")
   130     workspace_id = serializers.SerializerMethodField("get_related_workspace_guid")
   130     title = serializers.ReadOnlyField()
   131     title = serializers.ReadOnlyField()
   131     content = serializers.JSONField(read_only=True)
   132     content = serializers.JSONField(read_only=True)
   132     renkan_created_by = serializers.SerializerMethodField("get_related_renkan_creator")
   133     renkan_created_by = serializers.SerializerMethodField("get_related_renkan_creator")
   133     renkan_creation_date = serializers.SerializerMethodField("get_related_renkan_creation_date")
   134     renkan_creation_date = serializers.SerializerMethodField("get_related_renkan_creation_date")
   134     revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True)
   135     revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
   135     revision_last_updated_by = serializers.StringRelatedField(source="last_updated_by")
   136     revision_last_updated_by = serializers.StringRelatedField(source="last_updated_by")
   136     revision_modification_date = serializers.ReadOnlyField(source="modification_date")
   137     revision_modification_date = serializers.ReadOnlyField(source="modification_date")
   137     
   138     
   138     def get_related_workspace_guid(self, revision):
   139     def get_related_workspace_guid(self, revision):
   139         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   140         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   140         return parent_renkan.workspace_guid
   141         return parent_renkan.workspace_guid
   141     
   142     
   142     def get_related_renkan_creator(self, revision):
   143     def get_related_renkan_creator(self, revision):
   143         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   144         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   144         return getattr(parent_renkan.creator, settings.RENKAN_USER_DISPLAY_FIELD)
   145         return getattr(parent_renkan.creator, RENKAN_USER_DISPLAY_FIELD)
   145     
   146     
   146     def get_related_renkan_creation_date(self, revision):
   147     def get_related_renkan_creation_date(self, revision):
   147         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   148         parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid)
   148         return parent_renkan.creation_date
   149         return parent_renkan.creation_date
   149     
   150     
   150 
   151 
   151 class WorkspaceSerializer(serializers.Serializer):
   152 class WorkspaceSerializer(serializers.Serializer):
   152     id = serializers.ReadOnlyField(source="workspace_guid")
   153     id = serializers.ReadOnlyField(source="workspace_guid")
   153     workspace_created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True)
   154     workspace_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
   154     creation_date = serializers.ReadOnlyField()
   155     creation_date = serializers.ReadOnlyField()
   155     renkan_count = serializers.ReadOnlyField()
   156     renkan_count = serializers.ReadOnlyField()
   156     title = serializers.CharField()
   157     title = serializers.CharField()
   157     
   158     
   158     def create(self, validated_data):
   159     def create(self, validated_data):