Django中的类别递归
我一直在到处寻找这个问题的解决办法,但似乎找不到一个优雅的方式。简单来说,我有一个分类模型,这个模型有一个分类字段,用来表示一本书属于哪个分类,还有一个父分类字段。
我想创建一个模板来展示:
父分类1
- 分类1
- -- 书籍A
- -- 书籍B
- 分类2
- -- 书籍B
- -- 书籍C
父分类2
- 分类3
- -- 书籍B
- -- 书籍D
我的模型是:
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 个回答
2
试着使用django mptt这个工具,它可以帮助你在数据库中创建树形结构,非常实用。
它还提供了一些模板标签,帮助你生成HTML代码。
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>
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。