在Django管理界面中显示ManyToMany对象的字段名而非整个对象

9 投票
1 回答
3320 浏览
提问于 2025-04-18 02:16

我的模型如下:

class Retailer(BaseModel):
    brand = models.ManyToManyField('brands.Brand',blank=True)

class Brand(BaseModel):
    name = models.CharField(max_length=100, unique=True)
    website = models.URLField(max_length=500, blank=True, default='')

我的管理类如下:

class RetailerAdmin(admin.ModelAdmin):
    filter_horizontal = ('brand',)

在管理网站上,我可以看到多选字段,但品牌列表中的每一项都只显示为 Brand object,这让我很困惑。我希望每一项都能显示为该品牌的名称字段。我该怎么做呢?

1 个回答

18

你只需要在你的模型里添加一个 __unicode__ 方法(如果你用的是 Python 2)或者 __str__ 方法(如果你用的是 Python 3),这样就可以了,代码看起来会像这样:

class Brand(BaseModel):
    name = models.CharField(max_length=100, unique=True)
    website = models.URLField(max_length=500, blank=True, default='')

    def __unicode__(self):
        return self.name

撰写回答