3 database django caching many-to-many
我有:
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)
Run Code Online (Sandbox Code Playgroud)
我是这样定义的AList,因为我的代码将定义更有意义的函数,当与 A 列表一起使用时,而不是 A。即元数据内容等。
现在,我的问题是,如何使用select_related/prefetch_related以便在运行过滤器查询时可以保存所有A实例?xAListB
以下将起作用:
b_qs = B.objects.prefetch_related('a_list__list_of_a')
Run Code Online (Sandbox Code Playgroud)
现在
for b in b_qs:
x = b.a_list.list_of_a.all()
Run Code Online (Sandbox Code Playgroud)
将导致三个数据库查询:
使用m2n 表上的 an获取 table B、 tableAList和table :AINNER JOIN
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4257 次 |
| 最近记录: |