【发布时间】:2018-08-06 02:33:48
【问题描述】:
我有 Menu 模型,它的 ForeignKey 命名为 parent 与自身相关。
如果 parent 为 None,则表示此菜单是父菜单,如果显示另一个 Menu 对象,则表示它是其父级的子菜单(多对一关系)
这是我的问题,我想使用 prefetch_related 获取所有菜单及其子菜单,我该怎么做?
注意:我不想每次都让子菜单进入数据库 菜单
这是我的模型类
class Menu(models.Model):
title = models.CharField(max_length=30)
language = models.ForeignKey(Language)
parent = models.ForeignKey("self", default=None, blank=True, null=True, related_name="submenus")
这是我的查询
pm2 = Menu.objects.filter(parent=None, language__code=language, menutype=menutype).prefetch_related("submenus").order_by("order")
for p in pm2:
print(p.title)
print(p.submenus)
当我打印子菜单时,结果是app.Menu.None
【问题讨论】:
-
您的模型根本没有提到
submenus,所以我希望.prefetch_related("submenus")给出一个错误。您的子菜单会有自己的子菜单,还是您的菜单只有两个级别?如果您有多个级别,那么您可能需要查看django-mptt。 -
django-mptt 使用起来非常复杂。我建议改用物化路径(例如communities.bmc.com/docs/DOC-9902)
-
这个问题解决了吗?
-
@Bigbob556677 这根本不是问题。请查看my answer 了解原因。
-
queryset = Menu.objects.filter(parent=None, language__code=language, menutype=menutype).order_by("order").prefetch_related('submenus', 'submenus__submenus', 'submenus__submenus__submenus', “子菜单__子菜单__子菜单__子菜单”)
标签: django django-models django-orm