Добавить флажок и удалить действия в настраиваемый список изменений администратора 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