|
|
|
from rest_framework import serializers
|
|
|
|
from user_info.serializers import UserDescSerializer
|
|
|
|
from comment.models import Comment
|
|
|
|
|
|
|
|
|
|
|
|
class CommentChildrenSerializer(serializers.ModelSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='comment-detail')
|
|
|
|
author = UserDescSerializer(read_only=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Comment
|
|
|
|
exclude = [ # 不需要的字段
|
|
|
|
'parent',
|
|
|
|
'article',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
class CommentSerializer(serializers.ModelSerializer):
|
|
|
|
"""评论的序列化器"""
|
|
|
|
# HyperlinkedIdentityField用于自身
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='comment-detail')
|
|
|
|
author = UserDescSerializer(read_only=True)
|
|
|
|
# 设置为超链接,HyperlinkedRelatedField用于对外键关系
|
|
|
|
article = serializers.HyperlinkedRelatedField(view_name='article-detail', read_only=True)
|
|
|
|
# 需要知道是哪篇文章的评论
|
|
|
|
article_id = serializers.IntegerField(write_only=True, allow_null=False, required=True)
|
|
|
|
# parent为父评论
|
|
|
|
parent = CommentChildrenSerializer(read_only=True)
|
|
|
|
# 本身是父评论则不需要该字段
|
|
|
|
parent_id = serializers.IntegerField(write_only=True, allow_null=True, required=False)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Comment
|
|
|
|
fields = '__all__'
|
|
|
|
extra_kwargs = {'created': {'read_only': True}}
|
|
|
|
|
|
|
|
# 父评论只能在创建时被关联,后续不能更改
|
|
|
|
def update(self, instance, validated_data):
|
|
|
|
validated_data.pop('parent_id', None) # 更新时忽略parent_id参数
|
|
|
|
validated_data.pop('article_id', None) # 更新时忽略article_id参数
|
|
|
|
return super(CommentSerializer, self).update(instance, validated_data)
|
|
|
|
|
|
|
|
|