class ArticleFriendSerializer(AdoorBaseSerializer): author = serializers.HyperlinkedIdentityField(view_name='user-detail', read_only=True) author_detail = AuthorFriendSerializer(source='author', read_only=True) comments = serializers.SerializerMethodField() def get_comments(self, obj): current_user = self.context.get('request', None).user if obj.author == current_user: comments = obj.article_comments.order_by('is_anonymous', 'id') return CommentResponsiveSerializer(comments, many=True, read_only=True, context=self.context).data else: comments = obj.article_comments.filter(is_anonymous=False, is_private=False) | \ obj.article_comments.filter(author=current_user, is_anonymous=False).order_by('id') return CommentFriendSerializer(comments, many=True, read_only=True, context=self.context).data class Meta(AdoorBaseSerializer.Meta): model = Article fields = AdoorBaseSerializer.Meta.fields + [ 'share_with_friends', 'share_anonymously', 'author', 'author_detail', 'comments' ]
class QuestionFriendSerializer(QuestionBaseSerializer): """ for questions in friend feed (no responses) function is redundant to `QuestionResponsiveSerializer` but allows for faster responses when rendering friend/anonymous feeds. """ author = serializers.HyperlinkedIdentityField(view_name='user-detail', read_only=True) author_detail = AuthorFriendSerializer(source='author', read_only=True) class Meta(QuestionBaseSerializer.Meta): model = Question fields = QuestionBaseSerializer.Meta.fields + \ ['author', 'author_detail']
class CommentFriendSerializer(CommentBaseSerializer): author = serializers.SerializerMethodField(read_only=True) author_detail = AuthorFriendSerializer(source='author', read_only=True) replies = serializers.SerializerMethodField() def get_author(self, obj): return f'{BASE_URL}/api/user/{obj.author.id}/' def get_replies(self, obj): current_user = self.context.get('request', None).user if obj.target.type != 'Comment' and obj.target.author == current_user: replies = obj.replies.order_by('id') else: replies = obj.replies.filter(is_anonymous=False, is_private=False) | \ obj.replies.filter(author=current_user, is_anonymous=False).order_by('id') return self.__class__(replies, many=True, read_only=True, context=self.context).data class Meta(CommentBaseSerializer.Meta): model = Comment fields = CommentBaseSerializer.Meta.fields + ['author', 'author_detail', 'replies']
def get_actor_detail(self, obj): if obj.message[:13] == '익명의 사용자가 회원님의': return AuthorAnonymousSerializer(obj.actor).data return AuthorFriendSerializer(obj.actor).data
def get_author_detail(self, obj): if obj.author == self.context.get('request', None).user: return AuthorFriendSerializer(obj.author).data return AuthorAnonymousSerializer(obj.author).data
def get_author_detail(self, obj): current_user = self.context.get('request', None).user if User.are_friends(current_user, obj.author) or obj.author == current_user: return AuthorFriendSerializer(obj.author).data return AuthorAnonymousSerializer(obj.author).data