为什么这个中间 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" />
这是 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" />