Django:在list_display中显示ManyToManyField和Generic Relation

时间:2012-10-04 22:25:50

标签: django admin django-orm

我正在尝试使用list_display访问管理员中的字段。根据文档:(https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display),不支持ManyToManyFields。我通过创建这样的自定义方法来解决这个问题:

#models.py
class Gig
    musician = models.ManyToManyField(Musician)
    note = models.CharField(max_length=20)

    def __unicode__(self):
        return u'%s' % (self.note)

    def gig_musicians(self):
        return self.musician.all()

#admin.py
class GigAdmin
    list_display = ('note', 'gig_musicians')

这给了我正在寻找的结果,但它非常难看(这也适用于通用关系)。结果如下:

    [<Musician: Richard Bona>, <Musician: Bobby Mcerrin>]

我认为这是因为我如何构建方法。对于如何使这更优雅,即只是名字,你有什么建议吗?

我尝试过其他解决方案,比如 django display content of a manytomanyfield,但我无法让它为我工作(它只显示无)

1 个答案:

答案 0 :(得分:5)

您当前的gig_musicians会返回QuerySet,而不是字符串。

试试这个gig_musicians功能:

def gig_musicians(self):
   return ', '.join([obj.name for obj in self.musician.all()])