通过外键关系的属性查询元素,并且查询外键属性最有效

问题描述 投票:0回答:1

共有三种型号

Product
:有一个id,一个名字

Storage
:有 id、名称、颜色和分支

ProductStorage
:将每个产品映射到存储并具有一些额外的属性。

我想列出所有具有特定

ProductStorages
值的
Storage.branch
,并按存储分组,并显示存储名称和颜色。

是否可以在一个查询中完成此操作?我是 Django 新手,我不确定如何以最有效的方式做到这一点。

我知道我可以查询所有 ProductStorages 并按分支进行过滤。然后可能之后按其存储对它们进行排序,并在第二个查询中查询存储属性。但我想这不是最好的方法。

示例(所有 ProductStorages 按存储分组):

"Storage.Name1, Storage.Color1":
ProductStorage.Name1, ProductStorage.attr1, ...
ProdcutStorage.Name2, ProductStorage.attr2, ...
ProductStorage.Name3, ProductStorage.attr3, ...
...

"Storage.Name2, Storage.Color2":
ProductStorage.Name1, ProductStorage.attr1, ...
ProdcutStorage.Name2, ProductStorage.attr2, ...
ProductStorage.Name3, ProductStorage.attr3, ...
...
django django-models django-database
1个回答
0
投票

我会反转查询:您可以查询

ProductStorage
并使用
prefetch_lated
来获取相关产品,而不是请求Storage,我还使用“
through”定义
Storage
Product之间的关系

那么您的查询将类似于:

Storage.objects.all().prefetch_related("products")

或者如果您想过滤分支,请使用

.filter(branch=..).

© www.soinside.com 2019 - 2024. All rights reserved.