为什么这个中间 Django 页面不会返回到以前的操作?

Why won't this intermediate Django page get back to the former action?

这是 Django 1.11.29。我正在尝试使用中间页面编写一个简单的 Django 管理操作。我看到有人问过类似的问题 here 但即使按照回复建议我也无法解决它。

在我的 ModelAdmin 我有这个:

from django.contrib.admin import helpers
from django.shortcuts import render

class MyModelAdmin(admin.ModelAdmin):
    ...
    actions = ['send_email']
    ...

我这样实施 send_email 操作:

def send_email(self, request, queryset):
    print(request.POST)
    print(queryset)
    if 'apply' in request.POST:
        # Do some stuff
    else:
        return render(request, 'admin/confirm_email.html', { 'mymodels': queryset, 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME })

根据 Django 文档,这是非常标准的。

admin/confirm_email.html 看起来像这样:

{% extends "admin/base_site.html" %}

{% block content %}

<p>You\'re about to send a lot of mails!</p>

<form action="" method="post">
    {% csrf_token %}

    {% for mymodel in mymodels %}
    <input type="hidden" name="{{ action_checkbox_name }}" value="{{ mymodel.pk }}" />
    {% endfor %}

    <br />
    <input type="button" value="Cancel" onClick="history.go(-1); return true;" />
    <input type="submit" name="apply" value="Confirm" />
</form>

{% endblock %}

问题是当调用admin action时,它进入了中间页面,但是当点击Confirm按钮时,它不会回调admin action,所以我无法处理答案。它只是在管理页面上显示了一段说明 "No action selected" 的文本。

那么为什么在点击 Confirm 按钮时没有再次调用 send_email() 方法?我见过几个类似的例子,它们似乎都有效,我不明白为什么这个不行。

我好像忘了在表单中引用管理操作。在表单中添加以下语句产生了不同:

<input type="hidden" name="action" value="send_email" />