Django views.py Исключение Значение: Не удалось разобрать остаток:

Добрый день. Подскажите, пожалуйста, в чем может быть дело - у меня возникает ошибка Exception Value:

Не удалось разобрать остаток: '(column)' из 'item.get(column)'

views.py :

def home(request):
    position = DjangoEmail.objects.get(Email=request.user).Position
    year_filter = Q(Year=now.year) | Q(Year=now.year-1) | Q(Year=now.year+1)
    if position == 7:
        data = Employee.objects.filter(year_filter, Mlkk=request.user).order_by('Year','OblastTM').values('Year', 'OblastTM', 'Category', 'ProductGroup','NameChaine').annotate(Januaru=Sum('January'))
    elif position == 6:
        data = Employee.objects.filter(year_filter, Rmkk=request.user).order_by('Year','OblastTM').values('Year', 'OblastTM', 'Category', 'ProductGroup','NameChaine').annotate(Januaru=Sum('January'))
    elif position == 5:
        data = Employee.objects.filter(year_filter, Dmkk=request.user).order_by('Year','OblastTM').values('Year', 'OblastTM', 'Category', 'ProductGroup','NameChaine').annotate(Januaru=Sum('January'))    
    else:
        data = Employee.objects.filter(year_filter).order_by('Year','OblastTM').values('Year', 'OblastTM', 'Category', 'ProductGroup','NameChaine').annotate(Januaru=Sum('January'))
    columns = ['Year', 'OblastTM', 'Category', 'ProductGroupe', 'NameChaine','January']
    removed_columns = request.GET.getlist('remove')
    columns = [column for column in columns if column not in removed_columns]
  
    return render(request, "home.html", {'data': data, 'columns': columns})

home.html :

<table>
        <thead>
            <tr>
                {% for column in columns %}
                <th>{{ column|title }}</th>
                {% endfor %}
            </tr>
        </thead>
        <tbody>
            {% for item in data %}
            <tr>
                {% for column in columns %}
                <td>{{ item.get(column)}}</td>
                {% endfor %}
            </tr>
            {% endfor %}
        </tbody>
</table>

ошибка :

Значение исключения:Не удалось разобрать остаток: '(column)' из 'item.get(column)'

Ошибка в строке :

<td>{{ item.get(column)}}</td>

Я пробовал заменить его на {{ item[column] }} - это не помогло.

В шаблонах Django нельзя делать подзапись или вызывать методы, поэтому {{ item.get(column) }} невозможен. В любом случае, это часто не очень хорошая идея: вы должны передавать данные в шаблоне в доступном формате.

Таким образом, вы готовите это как:

from operator import itemgetter


def home(request):
    position = get_object_or_404(DjangoEmail, Email=request.user).Position
    year_filter = Q(Year__range=(now.year - 1, now.year + 1))
    columns = [
        'Year',
        'OblastTM',
        'Category',
        'ProductGroupe',
        'NameChaine',
        'Januaru',
    ]
    removed_columns = set(request.GET.getlist('remove'))
    columns = [column for column in columns if column not in removed_columns]
    queryset = Employee.objects.filter(year_filter)
    if position == 7:
        queryset = queryset.filter(Mlkk=request.user)
    elif position == 6:
        queryset = queryset.filter(request.user)
    elif position == 5:
        queryset = queryset.filter(Dmkk=request.user)
    queryset = (
        queryset.order_by('Year', 'OblastTM')
        .values('Year', 'OblastTM', 'Category', 'ProductGroupe', 'NameChaine')
        .annotate(Januaru=Sum('January'))
    )
    if columns:
        getter = itemgetter(*columns)
        if len(columns) == 1:
            data = [(getter(data),) for data in queryset]
        else:
            data = [getter(data) for data in queryset]
    else:
        data = ((),) * queryset.count()

    return render(request, 'home.html', {'data': data, 'columns': columns})

тогда мы можем отобразить это с помощью:

<thead>
    <tr>
        {% for column in columns %}
        <th>{{ column|title }}</th>
        {% endfor %}
    </tr>
</thead>
<tbody>
    {% for row in data %}
    <tr>
        {% for cell in row %}
        <td>{{ cell }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</tbody>
Вернуться на верх