我有以下表结构:
menu --{ page --{ title
从菜单中我想获取相关页面。页面也有相关的标题。 以下代码完全按照我的意愿工作,但for循环每次迭代都会生成一个单独的查询。
初始查询中的prefetch_related似乎没有获取标题。有没有更好的方法来执行此操作,从而导致查询数量较少?
menu_data = MenuOrder.objects \
.filter(menu__name=kwargs['menu']) \
.filter(page__title_set__language=language) \
.prefetch_related('page') \
.order_by('priority')
for menu_obj in menu_data:
title_obj = menu_obj.page.title_set.get()
提前致谢,
答案 0 :(得分:3)
您可以尝试:
.prefetch_related('page__title')
以下都是合法的:
Restaurant.objects.prefetch_related('pizzas__toppings')
另外,请记住,对于reduce查询,您应该使用select_related
答案 1 :(得分:0)
好吧,我发现扭转这种关系减少了大量的查询次数:
title_data = Title.objects \
.filter(language=language) \
.filter(page__menuorder__menu__name=kwargs['menu']) \
.order_by('page__menuorder__priority')
我不知道是否有更好的方法,所以现在我会接受这个。感谢所有看过的人..