【发布时间】:2017-03-28 09:45:38
【问题描述】:
如何在 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 个相关对象,则不显示过滤器。
【问题讨论】:
-
到目前为止你有任何代码吗?
-
见上面的例子。
-
位置是对象吗?还是字符串输入?还是选择?
-
地点是选择。
-
这可能吗。关于如何解决这个问题的任何想法?
标签: django-admin django-modeladmin