当前位置:  开发笔记 > 后端 > 正文

在Django中,你不能在ManyToManyField上使用字符串连接吗?ManyToMany不只是一个清单吗?

如何解决《在Django中,你不能在ManyToManyField上使用字符串连接吗?ManyToMany不只是一个清单吗?》经验,为你挑选了2个好方法。

我的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)

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)

jweyrich.. 11

另一种选择是:

return " vs ".join(p.full_name for p in self.players.all())

注意:很抱歉带回来 - 掘墓人:-)



1> jweyrich..:

另一种选择是:

return " vs ".join(p.full_name for p in self.players.all())

注意:很抱歉带回来 - 掘墓人:-)



2> S.Lott..:

"ManyToManyFields不只是列表吗?"

没有.

他们查询集.哪个是列表,但实际上不是列表.

做这个.

return " vs ".join(list(self.players))

list函数将强制评估查询集并返回列表对象.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有