Django:如何在admin中显示实际对象

时间:2013-05-02 08:46:10

标签: python django django-models django-admin django-orm

我有一个模型定义如下:

class Artist(models.Model):
    """Model class to record Artist"""
    artist_name = models.CharField(max_length=200)
    artist_id = models.CharField(unique=True, max_length=50)
    # similar relationship is defined.
    related_to = models.ManyToManyField("self", null=True, blank=True)

    def __unicode__(self):
        return self.artist_name

当我使用django'管理面板中的艺术家'删除'管理员操作时,我得到:

Artist: trojan

    From_artist-to_artist relationship: Artist_related_to object
    From_artist-to_artist relationship: Artist_related_to object
    From_artist-to_artist relationship: Artist_related_to object
    From_artist-to_artist relationship: Artist_related_to object

Artist: betty

    From_artist-to_artist relationship: Artist_related_to object
    From_artist-to_artist relationship: Artist_related_to object

如何获得我在删除期间被警告的实际关系?

换句话说,如何将'Artist_related_to object'人性化以反映实际的艺术家名称。

2 个答案:

答案 0 :(得分:2)

您在管理删除问题中看到的是Django为您透明创建的ManyToMany桥模型的实例。

如果您想更改自己的__unicode__表示,则必须定义自己的桥模型,并设置ManyToManyField以将其与through parameter一起使用。

示例:

class ArtistRelationship(models.Model):
    from_artist = models.ForeignKey('Artist')
    to_artist = models.ForeignKey('Artist')

    def __unicode__(self):
        return u"%s - %s" % (self.from_artist.name, self.to_artist.name)


class Artist(models.Model):
    name = models.CharField(max_length=200)
    # ... more fields ...
    related_to = models.ManyToManyField("self", null=True, blank=True,
                                        through=ArtistRelationship)

答案 1 :(得分:-2)

返回必须是字符串而不是CharField,请尝试:return u"%s" % (self.artist_name, )