【发布时间】:2019-05-13 18:35:37
【问题描述】:
我想在 Django Admin 的 list_display 中添加“注释计数”字段。
models.py
class Log(models.Model):
...
ip_address = models.GenericIPAddressField(
verbose_name=_('IP address'),
db_index=True,
)
...
admin.py
class LogAdmin(admin.ModelAdmin):
list_display = (..., 'ip_address', 'ip_address_count', ...)
def ip_address_count(self, instance):
return models.Log.objects \
.filter(ip_address=instance.ip_address) \
.count()
ip_address_count.short_description = _('IP Address Count')
它适用于“大量”SQL 查询。
我想像这样改进我的admin.py:
class Log(models.Model):
...
def get_queryset(self, request):
qs = super(LogAdmin, self).get_queryset(request)
qs = qs.values('ip_address') \
.annotate(ip_address_count=Count('ip_address'))
return qs
def ip_address_count(self, instance):
return instance.ip_address_count
但是,我遇到了错误消息:
'dict' object has no attribute '_meta'
看来我找到了错误发生的原因:
Django Admin, can't groupe by: Exception Value: 'dict' object has no attribute '_meta'
但是,它并不能帮助我解决问题。
感谢您的回答。
编辑:如果我不附加.values('ip_address),它会出错。
它不是group by ip_address。它group by 所有字段group by field1, field2, ip_address, ... 因此,它导致所有情况为“1”。
【问题讨论】:
-
您仍然收到错误
'dict' object has no attribute '_meta'? -
@SachinKukreja 是的,我是。很遗憾。 :-(
标签: django django-admin django-orm