django - 注释来自 Django RelatedManager 的中间模型的字段
问题描述
给定一个 Django 中间模型,ManyToManyField
例如
class Player(models.Model):
name = models.CharField(max_length=128)
class Team(models.Model):
name = models.CharField(max_length=128)
players = models.ManyToManyField(Player, through='Membership', related_name='teams')
class Membership(models.Model):
player = models.ForeignKey(Player, related_name='membership')
team = models.ForeignKey(Team, related_name='membership')
is_manager = models.BooleanField()
我想将字段注释Membership
到相关的经理查询中,例如
team = get_team()
team.players\
.annotate(is_manager=F('membership__is_manager'))\
.all()
但这会导致memberships
back to的外部连接players
。
我知道我可以直接打开查询并查询Membership
,但我需要的是Player
输入序列化程序的对象。很明显我将如何在 SQL 中表达这一点,但我无法弄清楚如何在 ORM 中表达它。
更新:我想出了一个绝对可怕的外连接解决方法,即再次过滤,但必须有更好的方法:
team.players\
.annotate(filter_team_id=F('membership__team_id'),
is_manager=F('membership__is_manager'))\
.filter(filter_team_id=team.id)
解决方案
推荐阅读
- vespa - Vespa中文档ID的自动增量
- javascript - 如何控制这些组件?
- macros - 有没有办法将 match 语句的主体与 Rust 宏匹配?
- javascript - 从 Jest 单元测试输入时,Chrome 调试器无响应?
- java - 检索 firebase 数据库时,子节点值为空
- php - Wordpress - 当其他用户喜欢他们的帖子时向用户发送电子邮件
- android - 打开新屏幕后返回屏幕时重新出现 LiveData 值
- javascript - array_contains 查询对象
- python-3.7 - 需要帮助将网页处理为文件,然后再将文件与网页进行比较以确定是否发生了更改
- apache-kafka - KSQL:左连接不等于条件不满足结果