class TeamGroupDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) members = UserBaseSerializer(many=True, read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = TeamGroup fields = '__all__'
class CollectedDocUserDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) c_doc = CollectedDocBaseSerializer(read_only=True) user = UserBaseSerializer(read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = CollectedDocUser fields = '__all__'
class SystemSettingListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) value = serializers.SerializerMethodField(read_only=True) def get_value(self, obj): try: if obj.set_type == 30: return int(obj.value) if obj.set_type == 40: return round(float(obj.value)) if obj.set_type == 50: return list(obj.value) if obj.set_type == 60: if obj.value.lower() == 'true': return True else: return False if obj.set_type == 70: return dict(obj.value) return obj.value except Exception as error: return obj.value class Meta: model = SystemSetting fields = ('id', 'key', 'name', 'value', 'description', 'set_type', 'created_time', 'creator')
class FileGroupListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = FileGroup fields = ('id', 'name', 'group_type', 'created_time', 'creator')
class FileAttachmentListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = FileAttachment fields = ('id', 'group', 'file_name', 'file_path', 'file_source', 'file_type', 'file_size', 'creator', 'created_time')
class CollectedDocDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) member_perm = serializers.SerializerMethodField(read_only=True) def get_member_perm(self, obj): user = self.context['request'].user if not user.is_anonymous: if obj.creator == user or user.is_admin: return 30 # 文集管理员 perms = [0] user_perms = obj.users.filter(user=user).values_list('perm', flat=True) if user_perms: perms.append(max(user_perms)) user_member_teams = obj.teams.filter(c_doc_team_users__user=user).all() for user_member_team in user_member_teams: team_perms = user_member_team.c_doc_team_users.filter(user=user).values_list('perm', flat=True) if team_perms: perms.append(max(team_perms)) return max(perms) else: return 0 class Meta: model = CollectedDoc fields = '__all__'
class SystemSettingDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) value = serializers.CharField(read_only=True) def get_value(self, obj): try: if obj.set_type == 30: return int(obj.value) if obj.set_type == 40: return round(float(obj.value)) if obj.set_type == 50: return list(obj.value) if obj.set_type == 60: if obj.lower() == 'true': return True else: return False if obj.set_type == 70: return dict(obj.value) return obj.value except Exception as error: return obj.value class Meta: model = SystemSetting fields = '__all__'
class RegisterCodeListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = RegisterCode fields = ('id', 'code', 'all_cnt', 'used_cnt', 'status', 'creator', 'created_time')
class CollectedDocUserListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) c_doc = CollectedDocBaseSerializer(read_only=True) user = UserBaseSerializer(read_only=True) class Meta: model = CollectedDocUser fields = ('id', 'c_doc', 'user', 'perm', 'created_time')
class RegisterCodeDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = RegisterCode fields = '__all__'
class DocTagListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = DocTag fields = ('id', 'name', 'created_time', 'creator')
class FileAttachmentDetailSerializer(serializers.ModelSerializer): group = FileGroupBaseSerializer(read_only=True) created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = FileAttachment fields = '__all__'
class DocHistorySerializer(serializers.ModelSerializer): doc = DocBaseSerializer(read_only=True) creator = UserBaseSerializer(read_only=True) created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) class Meta: model = DocHistory fields = ('id', 'created_time', 'creator', 'doc')
class EmailVerificationCodeListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) expired_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = EmailVerificationCode fields = '__all__'
class TeamGroupListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) members_cnt = serializers.SerializerMethodField(read_only=True) creator = UserBaseSerializer(read_only=True) def get_members_cnt(self, obj): return obj.members.count() class Meta: model = TeamGroup fields = ('id', 'name', 'members_cnt', 'created_time', 'creator')
class AnnouncementListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) desc = serializers.SerializerMethodField(read_only=True) def get_desc(self, obj): return md_to_text(obj.content) class Meta: model = Announcement fields = ('id', 'title', 'link', 'is_publish', 'creator', 'created_time', 'desc')
class DocDetailSerializer(serializers.ModelSerializer): c_doc = CollectedDocBaseSerializer(read_only=True) parent_doc = DocBaseSerializer(read_only=True) tags = DocTagBaseSerializer(read_only=True, many=True) created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) class Meta: model = Doc fields = '__all__'
class TeamGroupActionSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) def create(self, validated_data): instance = super().create(validated_data) instance.creator = self.context['request'].user instance.save() return instance class Meta: model = TeamGroup fields = '__all__'
class CollectedDocTeamDetailSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) c_doc = CollectedDocBaseSerializer(read_only=True) team_group = TeamGroupBaseSerializer(read_only=True) members = serializers.SerializerMethodField(read_only=True) members_cnt = serializers.SerializerMethodField(read_only=True) def get_members_cnt(self, obj): return obj.team_group.members.count() def get_members(self, obj): return CollectedDocTeamUserBaseSerializer(obj.c_doc_team_users.all(), many=True).data class Meta: model = CollectedDocTeam fields = '__all__'
class CollectedDocListSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) docs_cnt = serializers.SerializerMethodField(read_only=True) member_perm = serializers.SerializerMethodField(read_only=True) latest_doc = serializers.SerializerMethodField(read_only=True) def get_docs_cnt(self, obj): return obj.docs.count() def get_member_perm(self, obj): user = self.context['request'].user if not user.is_anonymous: if obj.creator == user or user.is_admin: return 30 # 文集管理员 perms = [0] user_perms = obj.users.filter(user=user).values_list('perm', flat=True) if user_perms: perms.append(max(user_perms)) user_member_teams = obj.teams.filter(c_doc_team_users__user=user).all() for user_member_team in user_member_teams: team_perms = user_member_team.c_doc_team_users.filter(user=user).values_list('perm', flat=True) if team_perms: perms.append(max(team_perms)) return max(perms) else: return 0 def get_latest_doc(self, obj): doc = obj.docs.filter(status=20, is_deleted=False).order_by('-created_time').first() if doc: return {'id': doc.id, 'title': doc.title} else: return None class Meta: model = CollectedDoc fields = ('id', 'name', 'intro', 'docs_cnt', 'perm', 'created_time', 'creator', 'member_perm', 'latest_doc')
class CollectedDocTeamActionSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) members = serializers.JSONField(required=False, write_only=True) def create(self, validated_data): members = validated_data.pop('members', None) instance = super().create(validated_data) instance.creator = self.context['request'].user instance.save() update_team_members(instance, members) return instance def update(self, instance, validated_data): members = validated_data.pop('members', None) instance = super().update(instance, validated_data) update_team_members(instance, members) return instance class Meta: model = CollectedDocTeam fields = '__all__'
class DocActionSerializer(serializers.ModelSerializer): created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) modified_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) tags = serializers.ListField(write_only=True, required=False) def create(self, validated_data): user = self.context['request'].user tags = validated_data.pop('tags', []) instance = super().create(validated_data) instance.creator = user for tag_name in tags: tag = DocTag.objects.filter(name=tag_name, creator=user).first() if not tag: tag = DocTag.objects.create(name=tag_name, creator=user) instance.tags.add(tag) instance.save() return instance def update(self, instance, validated_data): user = self.context['request'].user tags = validated_data.pop('tags', []) instance = super().update(instance, validated_data) instance.tags.clear() for tag_name in tags: tag = DocTag.objects.filter(name=tag_name, creator=user).first() if not tag: tag = DocTag.objects.create(name=tag_name, creator=user) instance.tags.add(tag) instance.save() return instance class Meta: model = Doc fields = '__all__'
class CollectedDocTeamUserBaseSerializer(serializers.ModelSerializer): user = UserBaseSerializer(read_only=True) class Meta: model = CollectedDocTeamUser fields = ('id', 'user', 'perm')
class DocListSerializer(serializers.ModelSerializer): c_doc = CollectedDocBaseSerializer(read_only=True) parent_doc = DocBaseSerializer(read_only=True) created_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', read_only=True) creator = UserBaseSerializer(read_only=True) child_docs = serializers.SerializerMethodField(read_only=True) member_perm = serializers.SerializerMethodField(read_only=True) content_text = serializers.SerializerMethodField(read_only=True) def get_child_docs(self, obj): child = [] for child_doc in Doc.objects.filter(parent_doc=obj): print(f'{obj} has chind_doc :{child_doc}') _child_docs = self.get_child_docs(child_doc) if len(_child_docs) > 0: child_doc_item = { 'id': child_doc.id, 'title': child_doc.title, 'child_docs': _child_docs, 'created_time': child_doc.created_time.strftime('%Y-%m-%d %H:%M:%S') } child.append(child_doc_item) else: child_doc_item = { 'id': child_doc.id, 'title': child_doc.title, 'child_docs': [], 'created_time': child_doc.created_time.strftime('%Y-%m-%d %H:%M:%S') } child.append(child_doc_item) return child def get_member_perm(self, obj): user = self.context['request'].user if not user.is_anonymous: if obj.creator == user or user.is_admin: return 30 # 文集管理员 perms = [0] user_perms = obj.c_doc.users.filter(user=user).values_list( 'perm', flat=True) if user_perms: perms.append(max(user_perms)) user_member_teams = obj.c_doc.teams.filter( c_doc_team_users__user=user).all() for user_member_team in user_member_teams: team_perms = user_member_team.c_doc_team_users.filter( user=user).values_list('perm', flat=True) if team_perms: perms.append(max(team_perms)) return max(perms) return 0 def get_content_text(self, obj): return md_to_text(obj.content) class Meta: model = Doc fields = ('id', 'c_doc', 'parent_doc', 'child_docs', 'title', 'created_time', 'status', 'creator', 'sort', 'member_perm', 'content_text')