Django树建模

时间:2012-03-13 02:38:23

标签: django django-models

我是一个完全迷失的新手,试图弄清楚如何动态生成我的硬编码链接列表,不仅是学习Django的菜鸟练习,而且还可以通过管理员编辑数据。 重要的是,它在通过数据库生成时看起来与现在处于硬编码状态时完全相同。

此处的主要内容需要以模型表示:

http://www.drugpolicyreformmovement.com/directory

我认为我首先会创建一个类别标题的“类别”表,然后将具有ForeignKey关系的链接“链接”表格重新分类。我认为在模板中我会使用'ifchanged'模板标签与(嵌套?)for循环一起依次遍历每个标题,显示每个标题的子记录。

这种情况变得复杂的是'研究与发展教育'标题儿童记录有自己的儿童记录。可能,特别是当我将这个代码重用于其他项目时,我需要容纳任意数量的子级别。

我花了两天时间浏览这里的文档和答案,但我仍然没有清楚地了解模型,视图或模板中的内容。

例如,如何遍历模板中的子级别以查看元素是否包含子级?你怎么做这一切,而不是每次观看db一千次?

2 个答案:

答案 0 :(得分:6)

您所做的是:使用django-mptt

这几乎是在数据库中存储节点树并以最小的db访问权限有效地检索节点的规范解决方案。它包含一些有用的模板标记,可以帮助您输出所需的内容。

答案 1 :(得分:1)

我强烈反对使用django-mptt有几个原因。

  1. 只需使用原始插入内容即可轻松破坏数据。
  2. 插入/移动/删除一个项目会导致整个树的更新。它可能在大树上很慢。
  3. 使用本地Postgres字段ltree要好得多。但是有一些缺点。它只是Postres那里。没有维护django本地库,您必须自己创建Postgres扩展。否则,您将收到错误type "ltree" does not exist。有一个简单的解决方法:CREATE EXTENSION ltree;

    这个django-tree回购似乎有效,但它官方不支持Django 2.0