Ejemplo n.º 1
0
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'
        ]
Ejemplo n.º 2
0
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']
Ejemplo n.º 3
0
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']
Ejemplo n.º 4
0
 def get_actor_detail(self, obj):
     if obj.message[:13] == '익명의 사용자가 회원님의':
         return AuthorAnonymousSerializer(obj.actor).data
     return AuthorFriendSerializer(obj.actor).data
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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