4

django admin の list_filter で各フィルターの後に関連オブジェクトの数を表示するにはどうすればよいですか?

class Application(TimeStampModel):

    name = models.CharField(verbose_name='CI Name', max_length=100, unique=True)
    description = models.TextField(blank=True, help_text="Business application")

class Server(TimeStampModel):
    name = models.CharField(max_length=100, verbose_name='Server Name', unique=True)
    company = models.CharField(max_length=3, choices=constants.COMPANIES.items())
    online = models.BooleanField(default=True, blank=True, verbose_name='OnLine')
    application_members = models.ManyToManyField('Application',through='Rolemembership',
            through_fields = ('server', 'application'),
            )

 
class Rolemembership(TimeStampModel):

    server = models.ForeignKey(Server, on_delete = models.CASCADE)
    application = models.ForeignKey(Application, on_delete = models.CASCADE)
    name = models.CharField(verbose_name='Server Role', max_length=50, choices=constants.SERVER_ROLE.items())
    roleversion = models.CharField(max_length=100, verbose_name='Version', blank=True)

Admin.py

@admin.register(Server)
class ServerAdmin(admin.ModelAdmin):

    save_on_top = True
    list_per_page = 30
    list_max_show_all = 500
    inlines = [ServerInLine]

    list_filter = (
        'region',
        'rolemembership__name',
        'online',
        'company',
        'location',
        'updated_on',
    )

つまり、リスト フィルターの各フィルターの後に、関連するオブジェクトの数を表示したいと考えています。

フィルタのリスト、つまり場所フィルタ リストのみが表示されるようになりました。

  • トロント
  • ニューヨーク
  • シカゴ

フィルターに以下のようにカウントを表示させたい:

  • トロント(5)
  • ニューヨーク(3)
  • シカゴ(2)

また、フィルターに関連するオブジェクトが 0 個ある場合は、フィルターを表示しません。

4

2 に答える 2