Example #1
0
class ReplySerializer(serializers.ModelSerializer):
    user = PostingProfileSerializer(source='user.userprofile', read_only=True)

    class Meta:
        model = Reply
        fields = ['id', 'reply_text', 'time_stamp', 'user', 'like_count']
        read_only_fields = ('id', 'time_stamp', 'user', 'like_count')
Example #2
0
class FollowersListSerializer(serializers.ModelSerializer):
    user = PostingProfileSerializer(source='follower.userprofile',
                                    read_only=True)

    class Meta:
        model = Follow
        fields = ['id', 'follower', 'user']
        read_only_fields = ('id', 'follower', 'user')
Example #3
0
class PostSerializer(serializers.ModelSerializer):
    images = PhotoSerializer(many=True, read_only=True, source='photo_posts')
    tags = serializers.ListField(child=serializers.CharField(max_length=12),
                                 write_only=True,
                                 required=False)
    _tags = TagShowSerializer(many=True, read_only=True, source='tagged_posts')
    user = PostingProfileSerializer(source='user.userprofile', read_only=True)

    class Meta:
        model = Post
        fields = [
            'id', 'post_text', 'time_stamp', 'images', 'like_count', 'tags',
            '_tags', 'user'
        ]
        read_only_fields = ('id', 'time_stamp', 'images', 'like_count', 'user')

    def create(self, validated_data):
        if validated_data.get('tags'):
            obj_id_list = []
            for name in validated_data['tags']:
                obj, _ = HashTag.objects.update_or_create(name=name)
                obj_id_list.append(obj.id)

            validated_data.pop('tags')
            post = Post.objects.create(**validated_data)

            data = {'post': post.id, 'tag': {*obj_id_list}}
            # validate unique-together
            serializer = TagPostListSerializer(data=data)
            serializer.is_valid(raise_exception=True)

            for obj_id in obj_id_list:
                tag = HashTag.objects.get(id=obj_id)
                TagPostList.objects.create(post=post, tag=tag)
        else:
            post = Post.objects.create(**validated_data)
        return post

    def update(self, instance, validated_data):
        if validated_data.get('tags'):
            obj_id_list = []

            for name in validated_data['tags']:
                obj, _ = HashTag.objects.update_or_create(name=name)
                obj_id_list.append(obj.id)

            validated_data.pop('tags')

            for obj_id in obj_id_list:
                tag = HashTag.objects.get(id=obj_id)
                TagPostList.objects.get_or_create(post=instance, tag=tag)

        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()

        return instance
Example #4
0
class StorySerializer(serializers.ModelSerializer):
    user = PostingProfileSerializer(source='user.userprofile', read_only=True)

    class Meta:
        model = Story
        fields = [
            'id', 'story_text', 'time_stamp', 'story_image', 'image_name',
            'user'
        ]
        read_only_fields = ('id', 'time_stamp', 'image_name', 'user')
Example #5
0
class PostLikeSerializer(serializers.ModelSerializer):
    user = PostingProfileSerializer(source='user.userprofile', read_only=True)

    class Meta:
        model = PostLike
        fields = ['id', 'user', 'post']
        read_only_fields = ('id', 'user', 'post')

    def validate(self, attrs):
        if PostLike.objects.filter(user=self.context['request'].user,
                                   post=self.context['view'].kwargs['post_pk']).exists():
            raise serializers.ValidationError('The fields `user`, `reply` must make a unique set.',
                                              code='unique')
        return super().validate(attrs)
Example #6
0
class FollowSerializer(serializers.ModelSerializer):
    user = PostingProfileSerializer(source='follower.userprofile',
                                    read_only=True)

    class Meta:
        model = Follow
        fields = ['id', 'follower', 'following', 'user']
        read_only_fields = ('id', 'follower', 'following', 'user')

    def validate(self, attrs):
        get_object_or_404(User, id=self.context['view'].kwargs.get('user_pk'))
        if Follow.objects.filter(
                follower=self.context['request'].user,
                following=self.context['view'].kwargs['user_pk']).exists():
            raise serializers.ValidationError(
                'The fields `follower`, `following` must make a unique set.')
        elif str(self.context['request'].user.id
                 ) == self.context['view'].kwargs['user_pk']:
            raise serializers.ValidationError('Can not following yourself.')
        return super().validate(attrs)