1.原生
- 使用SerializerMethodField()
- 定义函数def get_xxxx字段名(self,obj):
# 获取评论递归测试序列化器
class CommentSubsSerializers(serializers.ModelSerializer):
user = UserInfoSerializers(read_only=True)
ip_info = serializers.JSONField(source='get_ip_info', read_only=True)
child = serializers.SerializerMethodField()
class Meta:
model = Comment
fields = '__all__'
def get_child(self, obj):
if comment := Comment.objects.filter(parent_comment=obj.nid):
return CommentSubsSerializers(comment, many=True).data
else:
return None
2.由DRF提供模块
- pip install djangorestframework-recursive
from rest_framework_recursive.fields import RecursiveField
sub_comment = serializers.ListSerializer(source='get_subs', child=RecursiveField(), read_only=True) # 递归方法
user = UserInfoSerializers(read_only=True)
ip_info = serializers.JSONField(source='get_ip_info', read_only=True)
class Meta:
model = Comment
fields = '__all__'