为什么Django Admin有时在索引中使用模型的某个字段,而不是__unicode__方法?

3 投票
1 回答
815 浏览
提问于 2025-04-17 03:54

在我的一些模型中,Django-admin在显示模型对象的列表时,并不是像平常那样显示__unicode__方法的输出,而是直接显示模型的某个字段。

这种情况通常发生在我的模型里有类似这样的代码时:

class Meta:
    ordering = ['name']

在这种情况下,字段name的值会被显示出来(尽管我也定义了__unicode__方法),但并不是每次都这样,有时候它会显示__unicode__方法的内容,即使我在类的Meta里有设置排序。

我的__unicode__方法都很正常,像这样:

def __unicode__(self):
    return u'[%s] %s' % (self.field, self.name, )

我很困惑,为什么有时候会显示字段而不是__unicode__,我该如何让它始终使用__unicode__方法呢?这是Django 1.3版本。难道这是Django的一个bug吗?

1 个回答

2

你可以通过在你的 ModelAdmin 类中使用 list_display 选项来定制在 Django 管理后台显示的字段。

模型的 __unicode__ 方法和 Meta.ordering 选项不会影响显示的字段。

如果你没有设置 list_display,那么默认情况下会显示一列,每个对象的 unicode 字符串。

如果你的模型没有显示 unicode 字符串,那可能是因为你已经设置了 list_display。比如,如果你想显示名字字段而不是 unicode 字符串,你可以这样做:

class MyModelAdmin(models.ModelAdmin):
    list_display = ['name'] 

如果你想同时显示 unicode 字符串和其他字段,只需在 list_display 中包含 __unicode__

class MyModelAdmin(models.ModelAdmin):
    list_display = [`__unicode__`, 'name'] 

撰写回答