Учитывая ситуацию в Django 1.0, где у вас есть дополнительные данные об отношении "многие ко многим" :
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()
Отношение «многие ко многим» позволяет получить доступ к связанным данным, используя атрибуты (атрибут «Players» в объекте Team или используя атрибут «groups» в объекте «Player» посредством его связанного имени). Когда один из объектов помещается в контекст для шаблона (например, команда помещается в контекст для рендеринга шаблона, который генерирует список команды), к связанным объектам можно получить доступ (например, игроки в командах), но как доступ к дополнительным данным (например, «капитан») вместе со связанными объектами из объекта в контексте (например, команды) без добавления дополнительных данных в контекст?
Я знаю, что можно запросить напрямую у промежуточной таблицы, чтобы получить дополнительные данные. Например:
TeamPlayer.objects.get(player=790, team=168).captain
Или:
for x in TeamPlayer.objects.filter(team=168):
if x.captain:
print "%s (Captain)" % (x.player.name)
else:
print x.player.name
Выполнение этого непосредственно в промежуточной таблице, однако, требует от меня размещения дополнительных данных в контексте шаблона (результат запроса в TeamPlayer), которого я пытаюсь избежать, если такая возможность возможна.