我正在尝试制作一个支持任意数量回复的评论模型。我正在使用 Django Rest Framework,而对于评论树,我正在使用 django-treebeard。
这是我的模型代码:
class Comment(MP_Node):
paylasan = models.ForeignKey(
to=settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
soru = models.ForeignKey(
to=Soru,
related_name="comments",
on_delete=models.CASCADE)
metin = models.TextField()
upvote = models.PositiveIntegerField(default=0)
downvote = models.PositiveIntegerField(default=0)
created = models.DateTimeField(auto_now_add=True)
node_order_by = ['upvote']
def __unicode__(self):
return self.metin
这是我的观点,很简单:
class Comments(generics.ListAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
这是我的序列化器:
class CommentSerializer(serializers.ModelSerializer):
paylasan = serializers.StringRelatedField()
children = serializers.SerializerMethodField(
read_only=True, method_name="get_children_nodes"
)
parent = serializers.SerializerMethodField(
read_only=True, method_name="get_parent_nodes"
)
class Meta:
fields = (
"id",
"metin",
"soru",
"paylasan",
"children",
"parent",
"upvote",
"downvote",
"created"
)
model = Comment
def get_children_nodes(self, obj):
child_queryset = obj.get_descendants()
return CommentSerializer(child_queryset, many=True).data
def get_parent_nodes(self, obj):
try:
parent_id = obj.get_parent().id
except AttributeError:
return {}
parent_queryset = Comment.objects.filter(id=parent_id)
return CommentSerializer(parent_queryset, many=True).data
当我在 ipython shell 中运行测试时,我收到一条错误消息,指出
RecursionError: maximum recursion depth exceeded while calling a Python object
它最终指向序列化程序中的这些行:
~/Python/webapp/soruweb/serializers.py in get_children_nodes(self, obj)
82 def get_children_nodes(self, obj):
83 child_queryset = obj.get_descendants()
---> 84 return CommentSerializer(child_queryset, many=True).data
85
86 def get_parent_nodes(self, obj):
问题是,我如何摆脱这个错误?
编辑:我忘了说的是,当我尝试只包含子字段或父字段并评论另一个字段时,它会起作用。但是当我同时尝试它们时,它不起作用。