0

我真的被这个问题困住了。这是模型的简化版本:

# models.py
class CustomComment(models.Model):
    comment = models.CharField(max_length=500)
    parent_comment = models.ForeignKey('self', blank=True, null=True)
    active = models.BooleanField()

所以评论可以有子评论(虽然只有两个级别)。因此,在 api 中,当我查询我想要包含孩子的评论时。我有其他模型与其他模型有关系,但我找不到如何在同一个模型中建立关系。这是我尝试过的:

# api.py
class CustomCommentResource(ModelResource):
    children = fields.ToManyField('self', 'children', related_name='parent_comment', null=True, blank=True, full=True) # returns an empty array

    class Meta:
        queryset = CustomComment.objects.filter(parent_comment=None, active=True)
        resource_name = 'comment'

使用此代码,当我调用 api 时,对象确实有一个children属性,但它是一个空数组。

知道如何获得评论,每条评论都包括自己的孩子吗?谢谢

4

1 回答 1

0

起初我没有想到的是,在查询中我还指定了parent_comment=None. 而且孩子们不会有任何父母。

没关系。每个父母都可以通过相关的管理器访问孩子parent.customcomment_set

但我不知道它是否与用于关系的查询相同。

不会。它会为每个父级执行单独的查询以获取其子级,尽管您可以使用prefetch_related().

以下代码...

# api.py
class CustomCommentResource(ModelResource):
    children = fields.ToManyField('self', lambda bundle: bundle.obj.customcomment_set.all(), null=True, blank=True, full=True)

    class Meta:
        queryset = CustomComment.objects.filter(parent_comment=None, active=True)
        resource_name = 'comment'

...对我有用,但文档ToManyField并不是特别好,所以我不确定这是否是最好的方法。

于 2013-06-03T19:20:57.990 回答