1. 如何在列表页展示计算字段

你有一个Origin模型 的admin,向下面这样:

  1. @admin.register(Origin)
  2. class OriginAdmin(admin.ModelAdmin):
  3. list_display = ("name",)

除了名称,我们还希望显示每个OriginHero英雄数量和Villain反派数量,这些不是Origin上的DB字段。 您可以通过两种方式执行此操作。

1.1 在模型上添加方法

你可以为你的Origin添加2个方法,像下面这样:

  1. def hero_count(self, obj):
  2. return obj.hero_set.count()
  3. def villain_count(self, obj):
  4. return obj.villain_set.count()

list_display 改为list_display = ("name", "hero_count", "villain_count")

1.2 为ModelAdmin添加方法

如果你不想再model上添加方法, 你可以在ModelAdmin上添加

  1. def hero_count(self, obj):
  2. return obj.hero_set.count()
  3. def villain_count(self, obj):
  4. return obj.villain_set.count()

list_display 改为list_display = ("name", "hero_count", "villain_count")

1.3 计算字段,性能的考虑

上面2个方法,你将会进行为每个对象进行二次查询, 你可以查看如何在Django Admin 优化查询

进行上述更改之后,你的admin就会像下面这样: 1. 如何在列表页展示计算字段 - 图1