Добавить флажок и удалить действия в настраиваемый список изменений администратора Django
я настраивал Django
' s change_list.html
после этого учебник. Мой вопрос касается того, что не было охвачено в этом уроке:
как легко добавить checkbox
и actions
(удалить выбранные элементы)?
Я заглянул в templatetags
раздела администратора (в основном здесь, но я не мог понять, как легко добавить действие удаления к каждому элементу в настроенном change_list.html
шаблон и что следует добавить ModelAdmin
класс).
обновление:
Ниже приведен пользовательский change_list.html
, Я пытаюсь добавить флажки элементов в:
{% extends "admin/change_list.html" %}
{% block content_title %}
<h1>Title</h1>
{% endblock %}
{% block result_list %}
<div class="results">
<table id="result_list">
<thead>
...
</thead>
<tbody>
{% for item in items %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
1 ответов
ключ должен посмотреть на " admin / change_list.html "шаблон, который расширен в" sale_summary_change_list.формат HTML." Его блок result_list имеет необходимую форму. Вам также придется добавить флажки ввода в возвращаемый набор запросов в admin.py / changelist_view. Я изменил код из учебника. Мы, конечно, должны отбросить агрегацию по продажам, если мы хотим иметь возможность удалять отдельные элементы.
from django.contrib import admin
from django.contrib.admin import ModelAdmin, helpers
from .models import SaleSummary, Category
@admin.register(SaleSummary)
class SaleSummaryAdmin(ModelAdmin):
change_list_template = 'admin/sale_summary_change_list.html'
date_hierarchy = 'date'
def changelist_view(self, request, extra_context=None):
response = super(SaleSummaryAdmin, self).changelist_view(
request,
extra_context=extra_context,
)
try:
qs = response.context_data['cl'].queryset
except (AttributeError, KeyError):
return response
# metrics = {
# 'total': Count('id'),
# 'total_sales': Sum('amount'),
# }
result_qs = list(qs.values('category__name', 'pk', 'amount').order_by('category__name').all())
map(lambda r: r.update(
{'check_box': helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, r['pk'])}), result_qs)
response.context_data['summary'] = list(result_qs)
return response
и вот шаблон:
{% extends "admin/change_list.html" %}
{% load humanize admin_list%}
{% block content_title %}
<h1> Sales Summary </h1>
{% endblock %}
{% block result_list %}
{% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}
{% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}
<div class="results">
<table>
<thead>
<tr>
<th>
<div class="text">
<a href="#">Action</a>
</div>
</th>
<th>
<div class="text">
<a href="#">Category</a>
</div>
</th>
<th>
<div class="text">
<a href="#">Total Sales</a>
</div>
</th>
</tr>
</thead>
<tbody>
{% for row in summary %}
<tr class="{% cycle 'row1' 'row2' %}">
<td> {{ row.check_box }} </td>
<td> {{ row.category__name }} </td>
<td> {{ row.amount | intcomma }} </td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% block pagination %}{% endblock %}
Регистрация полный проект на GitHub:
https://github.com/SabirAkhadov/django-action-change-list-demo