我正在尝试使用django-cms构建一个非常简单的wiki类型的站点。
我有1个应用,定义了2个模型:
class Subject(models.Model):
label=models.CharField
class Topic(models.Model):
...
cat = models.ForeignKey('topics.Category',
blank=True,
default=None,
help_text=u'Please choose a category for this topic',
null=True
)
我试图让默认菜单将Subject类显示为顶级选项,将Topic类作为每个Subject的子级别。共有4个科目。 E.g:
主题1
-topic1
-topic2
主题2
-topic3
-topic4
等。
我已经阅读了所有django-cms文档,我仍然感到困惑。在我的menu.py中,我应该扩展Menu还是CMSAttachMenu?我需要4种不同的发电机吗?使用生成器时如何引用ForeignKey字段?
我是初学者,非常感谢任何帮助
答案 0 :(得分:0)
你可以这样做:
# menu.py
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from cms.menu_bases import CMSAttachMenu
from menus.base import NavigationNode
from menus.menu_pool import menu_pool
from .models import Subject
class SubjectsMenu(CMSAttachMenu):
name = _("Subjects Menu")
def get_nodes(self, request):
nodes = []
cnt = 0
for subject in Subjects.objects.all():
subject_node_id = cnt
node = NavigationNode(
subject.label,
reverse('subject_view_detail', args=(subject.pk,)),
subject_node_id
)
nodes.append(node)
for topic in subject.topics.all():
cnt += 1
node = NavigationNode(
topic.name,
reverse('topic_view_detail', args=(topic.pk,)),
cnt,
subject_node_id # parent
)
nodes.append(node)
cnt += 1
return nodes
menu_pool.register_menu(SubjectsMenu)
然后,您可以将此菜单添加到AppHook或从管理员附加。