В Django нельзя ли использовать соединение строк в ManyToManyField? ManyToMany - это не просто список?
В моем проекте Django есть две модели:
- Соответствие
- Игрок
Match имеет свойство ManyToMany, указывающее на игроков, так что в матче могут участвовать несколько игроков. Я хотел бы вернуть информативное имя объекта в админке Django, например, «Ричард Генри против Джона Доу», используя соединение полных имен игроков. Однако следующее не удается:
class Match(models.Model):
players = models.ManyToManyField(Player, verbose_name='Competitors')
def __unicode__(self):
return " vs ".join(self.players)
ManyToManyFields - это не просто списки? Почему я не могу к ним присоединиться? Любой вклад приветствуется. Вот моя модель игрока, если это поможет:
class Player(models.Model):
full_name = models.CharField(max_length=30)
def __unicode__(self):
return "%s" % self.full_name
Спасибо!
Изменить : я только что обнаружил, что могу использовать, self.players.list_display
чтобы это возвращалось в виде списка. Я больше не плевался на трассировку, но почему-то __unicode__
теперь возвращается имя None
. Есть идеи, почему это так?
Изменить 2 : измененный код:
class Match(models.Model):
players = models.ManyToManyField(Player, verbose_name='Competitors')
def __unicode__(self):
return " vs ".join(self.players.list_display)
Ответов (3)3
«Неужели ManyToManyFields - это не просто списки?»
Нет.
Это наборы запросов . Которые похожи на списки, но не на самом деле списки.
Сделай это.
return " vs ".join(list(self.players))
Функция списка принудительно выполнит оценку набора запросов и вернет объект списка.