具有递归多对多和结果显示的 Django 查询集

埃塞克斯

我想得到您的帮助,以便通过处理多对多字段并显示结果来找到我的问题的解决方案。

预期结果:

我的应用程序中有一个内容版本列表(例如:第 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django查询集的`count`调用有多昂贵?

来自分类Dev

Django多对多查询集过滤器

来自分类Dev

DJANGO-查询集和模型设计

来自分类Dev

用于分组和计数的 Django 查询集

来自分类Dev

Django 查询集过滤和注释

来自分类Dev

Django将带有子查询的查询集分组

来自分类Dev

使用有限的子查询过滤 Django 查询集

来自分类Dev

具有request.user的Django通用CBV查询集

来自分类Dev

无法使用Ajax和Django显示查询集

来自分类Dev

多对多查询(Django)

来自分类Dev

Django 多对多查询

来自分类Dev

django:带有查询集值的选择显示

来自分类Dev

Django复杂的查询集

来自分类Dev

django查询集字典

来自分类Dev

Django查询集

来自分类Dev

来自Django中查询集的查询集

来自分类Dev

Python Django如何正确测试查询集是否返回结果

来自分类Dev

Python Django如何正确测试查询集是否返回结果

来自分类Dev

Django:筛选查询集并选择结果外键

来自分类Dev

Django管理员列表显示优化查询集

来自分类Dev

Django查询集和动态字符串过滤

来自分类Dev

了解Django JSONField键路径查询和详尽集

来自分类Dev

Django查询集,用户模型和日期时间格式

来自分类Dev

Django 查询集:使用 .distinct() 和 .count() 处理表

来自分类Dev

Django、JSON 序列化查询集和模型列表具有不同的行为

来自分类Dev

Django反向查询集包含列表中的所有值

来自分类Dev

创建Django查询集快照的最有效方法?

来自分类Dev

Django 查询集如何排除没有组或标签的产品?

来自分类Dev

带有预取的 Django 查询集与否?