Python Django 相当于 Elixir Ecto 中的预加载

标签 python django orm 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来做到这一点或prefetch_relatedquerysets

根据您的情况,您可以这样做:

shop = Shop.objects.select_related('products').get(id=5)

shops = Shop.objects.prefetch_related('products').all()

在文档中执行查询时,select_latedprefetch_lated 之间存在差异。

关于Python Django 相当于 Elixir Ecto 中的预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67483128/

相关文章:

python - Matplotlib 在同一轴上超过 3 条线

python - 如何为Factory Boy指定数据库?

php - ORM 和 php 过滤掉数据库中的日期

django - Hadoop和Django,有可能吗?

django - Delphi IdHTTP 在 Django 创建的表单上发布

orm - ColdFusion ORM 在使用虚拟目录时找不到 CFC

delphi - 获取作为通用参数传递的枚举大小和名称

python - Docker-compose 无法导入 Django (ModuleNotFoundError)

python - 将训练数据更改为 libsvm 格式以将其传递给 libsvm 中的 grid.py

Python 和 Matplotlib : how to plot ellipse?