Python Django Tastypie:包括与同一模型的关系

Python Django Tastypie:包括与同一模型的关系,python,django,api,tastypie,Python,Django,Api,Tastypie,我真的被这个问题缠住了。以下是模型的简化版本: # models.py class CustomComment(models.Model): comment = models.CharField(max_length=500) parent_comment = models.ForeignKey('self', blank=True, null=True) active = models.BooleanField() 因此,注释可以有子注释(尽管只有两个级别)。因此,在

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

# 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
属性,但它是一个空数组

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

但我一开始没有想到的是,在查询中 同时指定
parent\u comment=None
。孩子们就不会有了 父母

没关系。通过相关的管理器
parent.customcomment\u set
始终可以从每个父级访问子级

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

不需要。它将为每个父级执行单独的查询,以访问其子级,尽管您可能可以通过使用在一个查询中执行此操作

下面的代码

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

…对我来说很有用,但的文档不是特别好,所以我不确定这是否是最好的方法。

您希望所有的评论(无论这些评论适用于什么)都采用层次结构,还是仅一条评论及其直接子项?@Aya抱歉,我忘了精确说明,只有两个级别。只有家长和孩子的评论,孩子们不能有孩子的评论。在回答中,我想让所有的家长和他们的孩子一起检查:您是否确认分配给
queryset
的查询实际上返回了任何对象?我注意到您的
active
字段将默认为
False
,但您仅选择
active=True
@Aya Yes创建对象时,该字段设置为
True
。但我一开始没有想到的是,在查询中我还指定了
parent\u comment=None
。孩子们也不会有父母了。但我不知道它是否与用于关系的查询相同。另外,即使我移除了它,它也不会返回任何东西。非常感谢你,这很有效!也谢谢你的解释。