我如何 prefetch_related() 与对象相关的所有内容?

How can I prefetch_related() everything related to an object?

我正在尝试将连接到用户实例的所有数据导出到 CSV 文件。为此,我需要先从数据库中获取它。使用像

这样的东西
data = SomeModel.objects.filter(owner=user)

在每个可能的模型上似乎都非常低效,所以我想使用 prefetch_related()。我的问题是,有没有什么方法可以一次预取所有不同模型的实例,FK 指向我的用户?

实际上,您不需要 "prefetch everything" 来创建 CSV 文件 – 或者其他任何东西 – 而且您真的不想这样做。 Python 的 CSV 支持当然是为工作 "row by row," 而设计的,这就是你想在这里做的:在一个循环中,一次从数据库中读取一行并一次写入一行到文件。

请记住,Django 是 惰性的。filter() 这样的函数指定了过滤的内容,但是直到您开始迭代,事情才真正开始发生在实际集合中。那时 Django 将构建查询,将其提交给 SQL 引擎,并开始检索返回的数据……一次一行。

让 SQL 引擎、Python 和操作系统来处理 "efficiency." 他们真的很擅长这类事情。