Решением было создание пользовательского тега шаблона.
в users/templatetags/table_tags.py
from django import template
register = template.Library()
@register.filter
def value_from_model(model, field):
return getattr(model, field)
в users/views.py
def users(request):
all_users = models.CustomUser.objects.all()
fieldnames = ['email', 'first_name', 'last_name', 'department']
fields = [all_users[0]._meta.get_field(field) for field in fieldnames]
context = {
'rows': all_users,
'cols': fields,
}
return render(request, 'users/table.html', context=context)
в users/templates/users/table.html
{% load table_tags %}
<table>
<tr>
{% for col in cols %}
<th>{{ col.verbose_name }}</th>
{% endfor %}
</tr>
{% for row in rows %}
<tr>
{% for col in cols %}
<td>{{ row|value_from_model:col.name }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Надеюсь, кто-нибудь найдет это полезным:)