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>