2

我有以下表结构:

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()

提前致谢,

4

2 回答 2

3

您可以尝试:

.prefetch_related('page__title')

引用与预取相关的文档

以下都是合法的:

Restaurant.objects.prefetch_related('pizzas__toppings')

另外,请记住,您应该使用 reduce 查询select_related

于 2012-12-16T00:02:20.790 回答
0

好吧,我发现反转关系已经大大减少了查询的数量:

title_data = Title.objects \
    .filter(language=language) \
    .filter(page__menuorder__menu__name=kwargs['menu']) \
    .order_by('page__menuorder__priority')

我不知道是否有更好的方法,所以现在我会接受这个。感谢所有看过的人。。

于 2012-12-17T13:13:28.303 回答