Django admin list view

django, django-admin, python

Solution

You could use the list_display attribute to define which fields are displayed in the change list page of the admin.

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.

Problem

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?

Original source