from rest_framework import serializers from journals.models import Thread, Journal class JournalSerializer(serializers.ModelSerializer): user = serializers.SerializerMethodField() label = serializers.SerializerMethodField() class Meta: model = Journal fields = ('label', 'date', 'user', 'files', 'action_type') @staticmethod def get_user(self): return self.user.get_full_name() @staticmethod def get_label(self): return self.extra_data if self.extra_data else """%s %s"""\ % (self.user.get_full_name(), self.get_action_type_display()) class ThreadDetailSerializer(serializers.ModelSerializer): journals = serializers.SerializerMethodField() children = serializers.SerializerMethodField() class Meta: model = Thread fields = ('journals', 'id', 'text', 'children', 'key',) @staticmethod def get_journals(self): return [JournalSerializer(i).data for i in self.journal_set.all()] @staticmethod def get_children(self): return [ThreadDetailSerializer(i).data for i in self.thread_set.all()] class ThreadAdminSerializer(serializers.ModelSerializer): count_children = serializers.SerializerMethodField() count_journals = serializers.SerializerMethodField() class Meta: model = Thread exclude = ('is_staff', ) @staticmethod def get_count_children(self): return self.child_thread_count() @staticmethod def get_count_journals(self): return self.journals_count() class ThreadUserSerializer(serializers.ModelSerializer): class Meta: model = Thread fields = ('id', 'text')