Django中的类别递归

时间:2011-05-30 17:34:36

标签: python django recursion

好的,我一直在寻找这个,但似乎无法找到优雅地做到这一点。基本上我有一个类别模型,它具有一本书所属的类别字段,然后是该类别的父类。

我正在尝试创建一个模板来显示:

Parent1

  • 组别
  • - booka
  • - bookb
  • 类别2
  • - bookb
  • - bookc

Parent2

  • 类别3
  • - bookb
  • - bookd

我的模特是:

class Category(models.Model):
        category = models.CharField(max_length=20)
        parent = TreeForeignKey('self', blank=True, null=True, related_name='children')
class Book(models.Model):
        bookname=models.CharField(_('bookname'), max_length=255)
        author=models.CharField(_('author'), max_length=255)
        manufacturer=models.CharField(_('manufacturer'), max_length=255)
        description=models.TextField(_('description'), blank=True)
        coverart = models.ImageField(upload_to="coverart", blank=True, null=True)
        adder=models.ForeignKey(User, related_name="added_models", verbose_name=_('adder'))
        added=models.DateTimeField(_('added'), default=datetime.now)
        category=models.ForeignKey(Category, related_name='cat')
        content=models.TextField(blank=True)

关于在我的观点/模板中执行此操作的最佳方法的任何想法?它只是一个基本的数据库浏览结构,但反向查找属于父母的类别/书籍让我感到困惑。

2 个答案:

答案 0 :(得分:2)

<ul>
{% for parent in categories %}
    <li>{{ parent.category }}
        <ul>
        {% for category in parent.children.all %}
        <li>{{ category.category }}
            <ul>
            {% for book in category.book_set.all %}
                <li>{{ book.bookname }}</li>
            {% endfor %}
            </ul>
        </li>
        {% endfor %}
        </ul>
    </li>
{% endfor %}
</ul>

答案 1 :(得分:2)

尝试使用django mptt帮助您在数据库上创建树结构。非常有用

他有一些模板标签来帮助创建html