【问题标题】:Django : how to display actual objects in adminDjango:如何在管理员中显示实际对象
【发布时间】:2013-04-26 08:59:12
【问题描述】:

我有一个模型定义如下:

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”人性化以反映实际的艺术家姓名。

【问题讨论】:

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


    【解决方案1】:

    您在管理员删除问题中看到的是 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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不认为你尝试了我在问题上给出的内容,尝试然后回复它不像你想象的那样工作。
      猜你喜欢
      • 2012-04-24
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      相关资源
      最近更新 更多