我想得到您的帮助,以便通过处理多对多字段并显示结果来找到我的问题的解决方案。
预期结果:
我的应用程序中有一个内容版本列表(例如:第 8 版、第 9 版、第 10 版...),对于每个版本,我都有一个包含 subversion 的集合列表(toto 9.8、toto 9.9、toto 9.10、toto 10.0 ,……)。
我正在尝试显示一个动态导航栏,其中包含根据内容版本的选项卡。每个选项卡都包含子版本列表。
Tab 9th Edition包含9.8, 9.9, 9.10, ...
Tab 10th Edition包含10.0, ...
---------
我的模型:
我有一个模型文件,其中包含:
class NavbarMenuSettings(models.Model):
""" A class to manage navbar menu of the application """
collection = models.ManyToManyField('publication.Collection', related_name='collection_list', symmetrical=False)
application = models.ForeignKey('publication.WebApplication', verbose_name=_('application'), related_name='application', on_delete=models.CASCADE)
title = models.CharField(max_length=30, verbose_name=_('title'), default=('Xth Edition (Current)'))
order = models.PositiveSmallIntegerField(default=1, verbose_name=_('menu order'), blank=True, null=False)
display = models.BooleanField(verbose_name=_('Display menu'), default=True)
class Meta:
verbose_name = _('menu setting')
verbose_name_plural = _('menu settings')
我有一个menu.py文件,可以用来处理我的导航栏:
def list_of_edition():
""" Return list of editions """
instance = NavbarMenuSettings.objects.filter(display=True).order_by('order')
return instance
edition_children = ()
for instance in list_of_edition():
edition_children += MenuItem(instance.collection.all(), reverse('home'), weight=150, separator=False),
for instance in list_of_edition():
Menu.add_item('edition', MenuItem(instance.title, '#', children=edition_children))
我试图让它动态。它为每个显示的 NavbarMenuSettings 对象创建一个新选项卡。但是在每个选项卡中,我都会获得所有 subversions 的列表,或者我想为每个选项卡仅显示关联的 subversion(s)。
我的测试:
如果我写这个测试:
for element in list_of_edition():
print(element.title)
print(element.collection.all())
它显示:
10th Edition (Current)
<QuerySet [<Collection: 10.0 lite>]>
9th Edition
<QuerySet [<Collection: 9.8 lite>, <Collection: 9.9 lite>, <Collection: 9.10 lite>]>
但是我如何处理我的菜单以显示每个标签版本以及相关的 subversions 列表?
我在这一步被阻止了。
谢谢
from collections import OrderedDict
od = OrderedDict()
for version in list_of_edition():
#print(element.title)
#print(element.collection.all())
od.setdefault((version.pk, version.title) []).extend([(subversion.pk, subversion.title) for subversion in version.collection.all()])
print(od)
试试这个代码。让我们知道会有什么问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句