Почему эта промежуточная страница Django не вернется к предыдущему действию? - PullRequest
0 голосов
/ 26 марта 2020

Это 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() не вызывается снова при нажатии кнопки Подтвердить ? Я видел несколько похожих примеров, и все они, кажется, работают, я не могу понять, почему это не так.

1 Ответ

0 голосов
/ 27 марта 2020

Кажется, что я забыл сослаться на действия администратора в форме. Добавление следующего утверждения в форму внесло изменения:

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