gpt4 book ai didi

Django:选择相关的嵌套外键

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:27 25 4
gpt4 key购买 nike

我有:

class A(models.Model):
pass
class AList(models.Model):
list_of_a= models.ManyToManyField(A)
random_statistical_info=models.CharField()
class B(models.Model):
a_list = models.ForeignKey(AList)

我正在定义 AList像这样,因为我的代码将定义更有意义的函数,当与 A 列表而不是 A 列表一起使用时。即元数据内容等。

现在,我的问题是,如何使用 select_related/prefetch_related这样我就可以保存所有 A实例以及xAList当我对 B 运行过滤器查询时?

最佳答案

以下将起作用:

b_qs = B.objects.prefetch_related('a_list__list_of_a')

现在

for b in b_qs:
x = b.a_list.list_of_a.all()

将导致三个数据库查询:

在 m2n 表上使用 INNER JOIN 获取表 B、表 AList 和表 A:

1 SELECT app_b.*
FROM app_b

2 SELECT app_alist.*
FROM app_alist
WHERE app_alist.id IN (1, 2, ...) # fk values from 1

3 SELECT (app_alista.alist_id) AS _prefetch_related_val_alist_id,
app_a.*
INNER JOIN app_alista ON app_a.id = app_alista.a_id
WHERE app_alista.alist_id IN (1, 2, ... ) # pk values from 2

关于Django:选择相关的嵌套外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com