gpt4 book ai didi

python - Django select_related 反向

转载 作者:太空狗 更新时间:2023-10-30 01:06:25 30 4
gpt4 key购买 nike

我有以下模型:

class Campaign(models.Model):
some_campaign_field = models.CharField()

class Position(models.Model):
campaign = models.ForeignKey(Campaign)
some_position_field = models.CharField()

class Trade(models.Model):
position = models.ForeignKey(Position)
some_trade_field = models.CharField()

换句话说,我有可以有多个职位的事件。反过来,事件中的每个头寸都可以有多个交易。

是否有一种有效的方法(即:最少的数据库调用)来选择一个事件及其所有相关的头寸和交易。看起来我不能使用 select_related 因为它只能以其他方式工作,例如:对于特定的交易,select_related 将获得所有相关的头寸。

目前我在嵌套循环中这样做,如下所示:

campaigns = Campaign.objects.get()
for campaign in campaigns:
positions = campaign.position_set.all()
for position in positions:
trades = position.trade_set.all()
# do stuff

这可以正常工作,但就数据库被命中的次数而言效率非常低。我有更好的方法吗?与 select_related 类似但反过来的东西?一种执行大型查询以获取所有营销事件以及关联的头寸和交易的方法,而无需逐一循环。

最佳答案

感谢评论中的建议,我最终得到了以下可行的解决方案:

open_campaigns = list(Campaign.objects.prefetch_related(
Prefetch('position_set',
queryset=Position.objects.all(),
to_attr='cached_positions'),
Prefetch('cached_positions__trade_set',
to_attr='cached_trades'),
).filter(exit_datetime__isnull=True))

编辑:这个导入也是必需的

from django.db.models import Prefetch

引用。 Prefetch docs

关于python - Django select_related 反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652520/

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