rmh*_*rmh 4 django django-models
我的Django项目中有两个模型:
Match有一个ManyToMany属性指向玩家,因此多个玩家可以参加比赛.我想在Django管理员中返回一个信息性的对象名称,类似于"Richard Henry vs John Doe",通过使用玩家全名的连接.但是以下失败:
class Match(models.Model):
players = models.ManyToManyField(Player, verbose_name='Competitors')
def __unicode__(self):
return " vs ".join(self.players)
Run Code Online (Sandbox Code Playgroud)
ManyToManyFields不只是列表吗?为什么我不加入他们?任何输入都表示赞赏.这是我的播放器模型,有助于:
class Player(models.Model):
full_name = models.CharField(max_length=30)
def __unicode__(self):
return "%s" % self.full_name
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:我刚刚发现我可以使用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)
Run Code Online (Sandbox Code Playgroud)
jwe*_*ich 11
另一种选择是:
return " vs ".join(p.full_name for p in self.players.all())
Run Code Online (Sandbox Code Playgroud)
注意:很抱歉带回来 - 掘墓人:-)
"ManyToManyFields不只是列表吗?"
没有.
他们查询集.哪个是列表,但实际上不是列表.
做这个.
return " vs ".join(list(self.players))
Run Code Online (Sandbox Code Playgroud)
list函数将强制评估查询集并返回列表对象.
| 归档时间: |
|
| 查看次数: |
3576 次 |
| 最近记录: |