博客五部曲之三 - 博客RESTful


1417 浏览 5 years, 2 months

20 创建评论序列化函数 2

版权声明: 转载请注明出处 http://www.codingsoho.com/

创建评论序列化函数 2

为CommentManager添加创建评论函数,同时在其序列化创建函数create里调用它去实现comment的创建

其中的user是暂时的,后面会实现它

comments/models.py

class CommentManager(models.Manager):
    def create_by_model_type(self, model_type, slug, content, user, parent_obj=None):
        model_qs = ContentType.objects.filter(model=model_type)
        if model_qs.exists():
            SomeModel = model_qs.first().model_class()
            obj_qs = SomeModel.objects.filter(slug=slug)
            if obj_qs.exists() and obj_qs.count() == 1:
                instance = self.model()
                instance.content = content
                instance.user = user
                instance.content_type = model_qs.first()
                instance.object_id = obj_qs.first().id
                if parent_obj:
                    instance.parent = parent_obj
                instance.save()
                return instance
        return None
from django.contrib.auth import get_user_model
User = get_user_model()

def create_comment_serializer(model_type='post', slug=None, parent_id=None):
    class CommentCreateSerializer(ModelSerializer):
        def create(self, validated_data):
            content = validated_data.get("content")
            user = User.objects.all().first()
            model_type = self.model_type
            slug = self.slug
            parent_obj = self.parent_obj
            comment = Comment.objects.create_by_model_type(
                    model_type, slug, content, user,
                    parent_obj=parent_obj,
                    )
            return comment