在Django admin中将类别显示为树的小部件

时间:2011-04-06 19:27:11

标签: django admin

是否有任何现有代码在Django站点的管理员中显示某些Category对象的列表? 理想情况下,我喜欢像

这样的树形表示

cat_1

---- cat_1_1

---- cat_1_2

cat_2

cat_3

---- cat_3_1

---- cat_3_2

---- cat_3_3

使用向上/向下按钮更改订单。

class Category(models.Model):

    parent = models.ForeignKey('self', null=True, related_name='children')
    name = models.CharField(max_length=100)

5 个答案:

答案 0 :(得分:2)

首先,您还没有在此模型上实际定义订单 - 只是父订单。您需要MPTT之类的内容来跟踪该级别内的级别和位置。

鉴于此,为模型编写__unicode__方法相当容易,该方法显示与类别级别相等的连字符数:

def __unicode__(self):
   return '%s%s' % ('-' * self.level, self.name)

至于上/下按钮,你需要在Javascript中写一下,我希望。

答案 1 :(得分:2)

这是一个小部件,基于django-mptt:
http://anentropic.wordpress.com/2009/11/05/more-django-mptt-goodness-filteredselectmultiple-m2m-widget/

看起来像你在找什么

答案 2 :(得分:1)

有一个django-categories package,可以在管理网站上添加一个包含所有类别的选择框来管理类别。

答案 3 :(得分:0)

这很简单

您在视图中所要做的就是获取所有对象:

categories = Category.objects.all()

然后在你的模板中:

{% for category in categories %}
  <li>- {{category.name}} </li>
  {% for child in category.children.all %}
     <ul>* {{child.nom}} </ul>
  {% endfor %}
 </li>          
{% endfor %}

答案 4 :(得分:0)

生成所需的树状结构需要表格数据的“修改的预序树遍历”。自定义实现将相当复杂。

您可以使用名为 Django MPTT 的现有包来简化基于 Category 模型的分层树生成。

有了它,您可以实现以下目标:

  • 获取节点的后代
  • 获取节点的祖先
  • 获取给定级别的所有节点
  • 获取叶子节点