【问题标题】:Querying a ManyToMany Field in a Django model在 Django 模型中查询多对多字段
【发布时间】:2013-05-17 18:03:54
【问题描述】:

所以我有这两个模型:

class Player(models.Model):
    playerName = models.CharField(max_length= 50)
    playerTeam = models.CharField(max_length=20)

class Role(models.Model):
    roleName = models.CharField(max_length= 50)
    players = models.ManyToManyField(Player)

现在,将不同的玩家存储在一个角色下很容易。我的目标是在一个角色下检索不同的“playerTeam”。为了清楚起见,我想要字符串格式的不同团队的值。所以,如果两个 Player 对象存储为:

p = Player(playerName='Zidane', playerTeam = 'Real Madrid') 
p1 = Player(playerName='Laudrup', playerTeam = 'Barcelona')

两者都被添加到一个角色对象中,比如:

r = Role(roleName='playmaker')
r.save()
r.add(p)
r.add(p1)
r.save()

我想写一个查询,结果是“皇家马德里”和“巴塞罗那”。

为它编写查询被证明是一项挑战。我能得到什么帮助吗?

【问题讨论】:

  • @themanatuf 我已通读文档。我正在寻找的查询没有给出。
  • @TimmyO'Mahony 我试图编写一个查询来获取列表中的这两个值,但没有这样做。
  • 您的查询是什么?您说了您希望它返回的内容,但从未真正说明实际查询是什么。您是否正在尝试为所有组织者寻找球队?
  • 您可能需要考虑更改模型。我会认为一个球员可以有一个角色,而不是一个角色可以有球员。这似乎有点倒退,这可能是你遇到麻烦的原因。

标签: python database django models


【解决方案1】:

你需要的是:

r.players.values_list('playerTeam', flat=True)

其中r 是您希望获得团队的角色。

如果您想获得不同的团队,只需将结果放入 set()

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多