简体   繁体   English

Django管理列表视图

[英]Django admin list view

I have Model like: 我的模型如下:

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)

Of course it is shown as list like: 当然它显示为列表如:

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

I would like to show it like: 我想表现出来:

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

I know how to calculate field1_count() and field2_count() for user, but how keep only one row per user? 我知道如何为用户计算field1_count()和field2_count(),但每个用户如何只保留一行?

You could use the list_display attribute to define which fields are displayed in the change list page of the admin. 您可以使用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)

Note that this will make at least two queries per row in your change list page, which might or might not be a problem in your case. 请注意,这将在您的更改列表页面中每行至少进行两次查询,这在您的情况下可能是也可能不是问题。

Alternatively, you can try overwriting either ModelAdmin.queryset or ModelAdmin.changelist_view . 或者,您可以尝试覆盖ModelAdmin.querysetModelAdmin.changelist_view

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM