Это Django 1.11.29. Я пытаюсь написать простое действие администратора Django с промежуточной страницей. Я видел, что нечто подобное было задано здесь , но даже следуя совету ответа, я не могу решить его.
В моем 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 %}
Проблема заключается в том, что когда вызывается действие администратора, оно переходит на промежуточную страницу, но когда нажата кнопка Подтвердить , оно не будет вызывать действие администратора назад, поэтому я не могу обработать ответ. Он просто показывает текст «Не выбрано никакого действия» на странице администратора.
Так почему же метод send_email()
не вызывается снова при нажатии кнопки Подтвердить ? Я видел несколько похожих примеров, и все они, кажется, работают, я не могу понять, почему это не так.