django - Django 更好地加入
问题描述
这是我的模型。这就像一个运动队组织应用程序。赛事模型是类似于棒球比赛的体育赛事。任何人都可以属于多个团队。因此,团队成员代表团队的成员。
class Team(models.Model):
name = models.CharField(max_length=100, blank=True)
class TeamMember(models.Model):
member = models.ForeignKey(User, on_delete=models.CASCADE)
team = models.ForeignKey(Team, on_delete=models.CASCADE)
class Event(models.Model):
team = models.ForeignKey(Team, on_delete=models.CASCADE)
我想获取我的团队所拥有的事件列表。
def get_queryset(self):
teams = TeamMember.objects.filter(member=self.request.user).values('team')
return Event.objects.filter(team__in=teams)
这确实有效,但我想让它成为一个单一的连接。我的 ORM-fu 没那么好。
解决方案
正如文档所说
Django 提供了一种强大而直观的方式来“跟踪”查找中的关系,在幕后自动为您处理 SQL JOIN。要跨越关系,请跨模型使用相关字段的字段名称,用双下划线分隔,直到找到所需的字段。
...
它也可以向后工作。要引用“反向”关系,请使用模型的小写名称。
Event.objects.filter(team__teammember__member=self.request.user)
推荐阅读
- python - 无法获得预期的输出,即在第二次实例后反转 hello world
- javascript - 通过 Ajax 向 Controller 发送请求的问题
- angular - 重复标识符“EventEmitter”
- c# - 在 C# 和 Angular 之间启用预检 CORS
- node.js - 错误:无法连接到新的副本集主服务器
- python - 史基浦航班 api,使用 python 获取航班信息时出错
- python-3.x - 硒选择该元素后,有什么方法可以检查网站上按钮的所有信息?
- javascript - 正则表达式:为什么我在结果中得到空字符串
- ios - 无法在 SwiftUI 中使用 ForEach 和 CoreData 将数据正确传递给模态演示
- postgresql - 为什么 payment.customer_id 是错误的?