Как добавить строку сумма в Django Inline Model Admin?
У меня есть такие модели:
class Equipment(models.Model):
object = models.ForeignKey(Object, on_delete=models.CASCADE)
count = models.IntegerField('Количество', null=True, blank=True)
class EquipmentInline(admin.TabularInline):
model = Equipment
class ObjectAdmin(admin.ModelAdmin):
list_display = ('id', )
inlines = [EquipmentInline]
Я хочу добавить строку Сумма, в которой будет считаться суммарное количество по столбцу Количество.
Смотрел это решение django-admin: Add extra row with totals, но оно работает только для ModelAdmin и не работает для TabularInline.
Ответы (1 шт):
Автор решения: Duncan
→ Ссылка
Решил вопрос таким способом:
Создал templatetag
admin_totals.py
from django import template
from django.db.models import Sum
from objects.models import Object, Equipment
register = template.Library()
@register.inclusion_tag('admin/edit_inline/tabular_totals_results.html',
takes_context=True)
def equipment_totals(context):
object_id = context['object_id']
object_ = Object.objects.get(id=object_id)
equipments = Equipment.objects.filter(object=object_)
total = equipments.aggregate(Sum('count')).get('count__sum')
return {
'total': total if total else 0,
}
equipment_tabular.html
Взял файл tabular.html из Django и добавил в него
...
</tr></thead>
{% block result_list %}
{% endblock %}
<tbody>
...
tabular_totals.html
{% extends 'admin/edit_inline/equipment_tabular.html' %}
{% load admin_totals %}
{% block result_list %}
{% equipment_totals %}
{% endblock %}
tabular_totals_results.html
<tfoot>
<tr>
<td>Итого: </td>
<td>{{ total }}</td>
</tr>
</tfoot>