Я хотел бы добавить поле «количество аннотаций» в list_display в Django Admin.
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-запросами "LOTS OF".
Я хотел бы улучшить свой 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, не может группировать по: Исключение Значение: объект dict имеетбез атрибута '_meta'
Однако, это не помогает мне решить проблему.
Спасибо за ваши ответы.
Редактировать: Работает неправильно, еслиЯ не добавляю .values('ip_address)
.
Это не group by ip_address
.Это group by
все поля group by field1, field2, ip_address, ...
Следовательно, это приводит к "1" во всех случаях.