假设Django 1.0中有extra data on a Many-to-Many relationship:
class Player(models.Model):
name = models.CharField(max_length=80)
class Team(models.Model):
name = models.CharField(max_length=40)
players = models.ManyToManyField(Player, through='TeamPlayer', related_name='teams')
class TeamPlayer(models.Model):
player = models.ForeignKey(Player)
team = models.ForeignKey(Team)
captain = models.BooleanField()
多对多关系允许您使用属性(Team对象上的“players”属性或通过其相关名称使用Player对象上的“teams”属性)访问相关数据。当其中一个对象被放置到模板的上下文中时(例如,将一个团队放置到用于呈现生成团队花名册的模板的上下文中),可以访问相关对象(即团队中的玩家),但是,如何才能在不向上下文中添加额外数据的情况下,与上下文中的对象(例如团队)中的相关对象一起访问额外的数据(例如“队长”)?在
我知道可以直接查询中介表来获得额外的数据。例如:
^{pr2}$或者:
for x in TeamPlayer.objects.filter(team=168):
if x.captain:
print "%s (Captain)" % (x.player.name)
else:
print x.player.name
但是,直接在中介表上执行此操作需要在模板的上下文(TeamPlayer上查询的结果)中放置额外的数据,如果可能的话,我会尽量避免这种情况。在
所以,在问了15分钟后,我找到了自己的答案。在
使用
dir(Team)
,我可以看到另一个生成的名为teamplayer_set
的属性(它也存在于Player上)。在我不确定如何自定义生成的相关的_名称,但至少我知道我可以从模板获取数据,而无需向上下文中添加额外的查询结果。在
相关问题 更多 >
编程相关推荐