考虑以下型号:
第一个
好的,当我们找到一个模板,并创建一个for循环来创建每个出版物的表示并显示相应的标签时,Django会为每个出版物调用一个数据库来获取该出版物的所有标签,这意味着:tag.publications
的迭代x
-〉检查哪些标签与publication X
匹配。
当然,我们可以不显示标签,一切都会像魔术一样工作(利用prefetch_related
),但这不是我们想要的:)
我们怎么能在Django做类似的事情?
我们需要的是某种优化的方式来实现这样的结果,因为stackoverflow渲染15个项目的速度非常快,这让我觉得他们不会像Django默认的那样做。
This is what html might look like
This is what html code might look like
另外,我的问题听起来不太像。但以防万一有人会说:“哦,这是一个糟糕的设计,你根本不应该这样做”我决定举一个例子。
2条答案
按热度按时间sbdsn5lh1#
您可以在
Publication
模型中添加一个属性,将tags
呈现为字符串列表,因此:确保使用
prefetch_related("tags")
优化查询。更新I:
为了适合您的视图代码,您将使用
prefetch_related
作为:更新II:
您可以在这里阅读更多关于
prefetch_related
的信息。e4yzc0pl2#
答案很简单,您只需在
prefetch_related
中指定publications__tags
,即可得到: