Django 更好地加入

Posted

技术标签:

【中文标题】Django 更好地加入【英文标题】:Django better join 【发布时间】:2020-03-07 18:46:51 【问题描述】:

这是我的模型。这就像一个运动队组织应用程序。赛事模型是类似于棒球比赛的体育赛事。任何人都可以属于多个团队。因此,团队成员代表团队的成员。

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不是那么好。

【问题讨论】:

【参考方案1】:

正如Docs 所说

Django 提供了一种强大而直观的方式来“关注”关系 在查找中,自动为您处理 SQL JOIN,在后面 场景。要跨越关系,请使用相关的字段名称 跨模型的字段,用双下划线分隔,直到你得到 到你想要的领域。

...

它也可以反向工作。要引用“反向”关系,请使用 模型的小写名称。

Event.objects.filter(team__teammember__member=self.request.user)

【讨论】:

叮叮叮!谢谢!

以上是关于Django 更好地加入的主要内容,如果未能解决你的问题,请参考以下文章

Django AJAX。 dajax 是不是仍然可以或更好地立即迁移到 jQuery(2012 年复兴)?

MVC 和 django 基础知识

Django性能/内存使用[关闭]

Django - 如何通过 API 端点使用 rest_framework 动态地将多个对象添加到数据库中

django session可以存对象吗

Django 多对多模板问题