如何从父子关系模型中获取自己孩子的对象

时间:2018-05-20 06:23:38

标签: python django django-models django-rest-framework

我正在使用Django和DRF制作Twitter的克隆应用程序,其中包括以下型号。
Reply是一个定义Post的父子关系的模型。

class Post(models.Model):
    tweet = models.CharField(max_length=140, blank=False)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
        )
    created_at = models.DateTimeField(auto_now_add=True)

    @property
    def children(self):
        reply_obj = Reply.objects.filter(parent=self)
        children = []
        for obj in reply_obj:
            children.append(obj)
        return children


class Reply(models.Model):
    parent = models.ForeignKey(
        Post,
        related_name='parent_post',
        on_delete=models.CASCADE
        )
    child = models.ForeignKey(
        Post,
        related_name='child_post',
        on_delete=models.CASCADE
        )
    created_at = models.DateTimeField(auto_now_add=True)

我想获得一个Post对象列表,该对象成为具有属性children的帖子的子对象 但是,如果您在View中编写Post.objects.get (id = 1) .children,则可以使用<django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager. <Locals> .RelatedManager object at 0x10d0395c0> 返回,但我无法获得预期结果。
我怎样才能取得好成绩?

1 个答案:

答案 0 :(得分:3)

您不需要任何代码。只需使用反向关系。

鉴于Post的一个实例,您可以这样做:

my_post.parent_post.all()