Esempio n. 1
0
class PostDetailSerializer(ModelSerializer):
    url = post_detail_url
    user = UserDetailSerializer(read_only=True)
    image = SerializerMethodField()
    html = SerializerMethodField()
    comments = SerializerMethodField()

    class Meta:
        model = Post
        fields = [
            'url',
            'id',
            'user',
            'title',
            'slug',
            'content',
            'html',
            'publish',
            'image',
            'comments',
        ]

    def get_html(self, obj):
        return obj.get_markdown()

    def get_image(self, obj):
        try:
            image = obj.image.url
        except:
            image = None
        return image
Esempio n. 2
0
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        serializer = UserDetailSerializer(user, context={'request': request})

        return Response(serializer.data, HTTP_200_OK)
class CommentChildSerializer(ModelSerializer):
    user = UserDetailSerializer(read_only=True)
    class Meta:
        model = Comment
        fields = [
            'id',
            'user',
            'content',
            'timestamp',
        ]
Esempio n. 4
0
class PostListSerializer(ModelSerializer):
    user = UserDetailSerializer(read_only=True)

    class Meta:
        model = Post
        fields = [
            'user',
            'title',
            'content',
            'publish',
            'image',
        ]
Esempio n. 5
0
class ActivitysCreateSerializer(ModelSerializer):
    user = UserDetailSerializer(read_only=True)

    class Meta:
        model = Activitys
        fields = [
            'user',
            'activity_type',
            'content_type',
            'object_id',
        ]

    def validate(self, data):
        content_type = data.get("content_type")
        content_qs = ContentType.objects.filter(model=content_type)
        if not content_qs.exists() or content_qs.count() != 1:
            raise ValidationError("This is not valid content type")

        object_id = data.get("object_id")
        obj_model = content_qs.first().model_class()
        obj_qs = obj_model.objects.filter(id=object_id)
        if not obj_qs.exists() or obj_qs.count() != 1:
            raise ValidationError("Not valid Object Id")

        activity_type = data.get("activity_type")
        if not activity_type in ['L', "F", "U", "D"]:
            raise ValidationError("Not valid activity")

        return data

    def create(self, data):
        content_type = data.get("content_type")
        object_id = data.get("object_id")
        activity_type = data.get("activity_type")
        user = self.context['user']

        activity_qs = Activitys.objects.filter(content_type=content_type,
                                               user=user,
                                               object_id=object_id)
        if activity_qs.exists():
            raise ValidationError("Not valid opretion ")

        activity = Activitys.objects.create(content_type=content_type,
                                            object_id=object_id,
                                            user=user,
                                            activity_type=activity_type)
        return activity
Esempio n. 6
0
class PostCommentsCreateSerializer(ModelSerializer):
    user = UserDetailSerializer(read_only=True)
    type = CharField(required=False, write_only=True)
    slug = SlugField(write_only=True)
    parent_id = IntegerField(required=False)

    class Meta:
        model = Comments
        fields = [
            'id', 'user', 'type', 'slug', 'parent_id', 'content', 'timestamp'
        ]

    def validate(self, data):
        model_type = data.get("type", "posts")
        model_qs = ContentType.objects.filter(model=model_type)
        if not model_qs.exists() or model_qs.count() != 1:
            raise ValidationError("This is not valid content type")

        someModel = model_qs.first().model_class()
        slug = data.get("slug")
        obj_qs = someModel.objects.filter(slug=slug)
        if not obj_qs.exists() or obj_qs.count() != 1:
            raise ValidationError("This is not slug for comments")

        parent_id = data.get("parent_id")
        if parent_id:
            parent_qs = Comments.objects.filter(id=parent_id)
            if not parent_qs.exists() or parent_qs.count() != 1:
                raise ValidationError("This is not valid parent")
        return data

    def create(self, validated_data):
        content = validated_data.get("content")
        model_type = validated_data.get("type", "posts")
        slug = validated_data.get("slug")
        parent_id = validated_data.get("parent_id")
        parent_obj = None
        if parent_id:
            parent_obj = Comments.objects.filter(id=parent_id).first()
        user = self.context['user']
        comment = Comments.objects.create_by_model_type(model_type,
                                                        slug,
                                                        content,
                                                        user,
                                                        parent_obj=parent_obj)
        return comment
class CommentDetailSerializer(ModelSerializer):
    user = UserDetailSerializer(read_only=True)
    reply_count = SerializerMethodField()
    content_object_url = SerializerMethodField()
    replies =   SerializerMethodField()
    class Meta:
        model = Comment
        fields = [
            'id',
            'user',
            #'content_type',
            #'object_id',
            'content',
            'reply_count',
            'replies',
            'timestamp',
            'content_object_url',
        ]
        read_only_fields = [
            #'content_type',
            #'object_id',
            'reply_count',
            'replies',
        ]

    def get_content_object_url(self, obj):
        try:
            return obj.content_object.get_api_url()
        except:
            return None

    def get_replies(self, obj):
        if obj.is_parent:
            return CommentChildSerializer(obj.children(), many=True).data
        return None

    def get_reply_count(self, obj):
        if obj.is_parent:
            return obj.children().count()
        return 0
Esempio n. 8
0
class PostCommentsSerializer(ModelSerializer):
    user = UserDetailSerializer()
    replies = SerializerMethodField()
    reply_count = SerializerMethodField()

    class Meta:
        model = Comments
        fields = [
            'user',
            'id',
            'parent',
            'content',
            'timestamp',
            'replies',
            'reply_count',
        ]

    def get_replies(self, obj):
        return PostCommentsSerializer(obj.childer(), many=True).data

    def get_reply_count(self, obj):
        return obj.childer().count()