[ django-drf序列化递归 ]


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__'