我可以让Django管理员反映模型的层次结构吗?

Vas*_*nov 5 navigation django model one-to-many django-admin

假设Django应用程序具有一些通过一对多关系连接的模型:

class Blog(models.Model):
    ...

class Post(models.Model):
    blog = models.ForeignKey(Blog)
    ...

class Comment(models.Model):
    post = models.ForeignKey(Post)
    ...
Run Code Online (Sandbox Code Playgroud)

从概念上讲,它们形成层次结构,即树状结构。我希望Django管理员能够反映这一点。特别是:

  1. 在帖子的更改列表中,每个帖子都应具有指向相应评论的更改列表的链接;
  2. 同样,帖子的编辑页面应链接到右上角按钮区域的评论更改列表;
  3. 当我打开相关评论列表时,它需要在面包屑中反映这种关系(例如:帖子›“ Hello world”›评论),理想情况下还应在URL(post/123/comment/)中反映该关系。

当然,这也应适用于层次结构的其他级别。

list_display使用自定义条目并使用?post__id=查询更改注释列表可以轻松实现编号1 。但这仅是一种破解。通常,Django将我的三个模型假定为独立的顶级实体。

有没有简单的方法可以做到这一点?我想我可以重写一堆模板和AdminModel方法,但是对于似乎常见的情况,也许有更好的解决方案?

Ste*_*ano 1

您确定您不只是在查看Django Admin 内联模型吗?

自动化管理员无法获取您的关系,因为在 RDBS 中可以有任意数量的外键/一对一/多对多关系,并且 Django 没有内置的自定义分层行为。

如果需要,您确实可以编辑面包屑并自定义管理模板。

对于关系,您可能还对django MPTT感兴趣,它允许创建分层模型实例。另请参阅这个问题:在这方面为分层模型(django)创建高效的数据库查询。