Python Django 相当于 Elixir Ecto 中的预加载
Python Django equivelant of preloading in Elixir Ecto
所以我来自 Elixir 和 Phoenix Background,现在在 Django 项目中工作。
现阶段我正在研究 Django 的 ORM 部分,我有以下问题
假设模型如下
class Shop(models.Model):
name = models.TextField()
class Product(models.Model):
name = models.TextField()
shop = models.ForeignKey(Shop)
此时在 Ecto 中您可以执行以下操作
shop = Context.get_by_id(1)
shop = preload(shop, :products)
结果是
%Shop{
name: "Some name",
products: [
%Product{},
%Product{}
]
}
在幕后处理所有必要的连接查询使用 Django 时是否有类似的功能?
你应该可以用 select_related
or prefetch_related
in querysets
在你的情况下你可以这样做:
shop = Shop.objects.select_related('products').get(id=5)
或
shops = Shop.objects.prefetch_related('products').all()
select_related
和 prefetch_related
在执行文档中的查询时存在差异。
所以我来自 Elixir 和 Phoenix Background,现在在 Django 项目中工作。
现阶段我正在研究 Django 的 ORM 部分,我有以下问题
假设模型如下
class Shop(models.Model):
name = models.TextField()
class Product(models.Model):
name = models.TextField()
shop = models.ForeignKey(Shop)
此时在 Ecto 中您可以执行以下操作
shop = Context.get_by_id(1)
shop = preload(shop, :products)
结果是
%Shop{
name: "Some name",
products: [
%Product{},
%Product{}
]
}
在幕后处理所有必要的连接查询使用 Django 时是否有类似的功能?
你应该可以用 select_related
or prefetch_related
in querysets
在你的情况下你可以这样做:
shop = Shop.objects.select_related('products').get(id=5)
或
shops = Shop.objects.prefetch_related('products').all()
select_related
和 prefetch_related
在执行文档中的查询时存在差异。