Django管理列表视图

时间:2012-07-19 12:58:59

标签: python django django-admin

我的模型如下:

class MyModel(models.Model):
  user = models.ForeignKey(User)
  field1 = models.CharField(max_length=100, db_index=True, null=False, blank=False)
  field2 = models.CharField(max_length=100)

当然它显示为如下列表:

user1 | field1 | field2
user1 | field1 | field2
user2 | field1 | field2
user2 | field1 | field2

我想表现出来:

user1 | field1_count() | field2_count()
user2 | field1_count() | field2_count()

我知道如何为用户计算field1_count()和field2_count(),但每个用户如何只保留一行?

1 个答案:

答案 0 :(得分:3)

您可以使用list_display属性来定义管理员更改列表页面中显示的字段。

class MyAdmin(admin.ModelAdmin):
    list_display = ('username', 'field1_count', 'field2_count')

    def field1_count(self, obj):
        # count field1
        return c

    def field2_count(self, obj):
        # count field2
        return c

 admin.site.register(User, MyAdmin)

请注意,这会在您的更改列表页面中每行至少进行两次查询,这可能会或可能不会出现问题。

或者,您可以尝试覆盖ModelAdmin.querysetModelAdmin.changelist_view