在我的Django项目中,我有一个需要确认页面的管理操作。我将它定位在delete_selected操作上,但它不起作用。这就是我所拥有的。
SELECT DISTINCT
a.id AS uniqueid,
a.whatever,
a.whatever
FROM
XML_Import_Server a
JOIN (
SELECT MIN(id) id
FROM XML_Import_Server
GROUP BY ProductCode
) b ON a.id = b.id
WHERE
a.whatever = whatever
def my_action(modeladmin, request, queryset):
if request.POST.get('post'):
print "Performing action"
# action code here
return None
else:
return TemplateResponse(request, "admin/my_action_confirmation.html")
这几乎可以。我进入确认页面但是如果我点击"确认"我回到原始页面。永远不会到达带有操作代码的部分。实际上my_action函数不是第二次调用。那么我怎么告诉django,一旦我点击确认,我的第二次调用my_action函数?
答案 0 :(得分:1)
这对我有用:
添加确认操作方法(在admin.py中)
from django.template.response import TemplateResponse
def confirm_my_action(modeladmin, request, queryset):
response = TemplateResponse(request,
'admin/confirm_my_action.html',
{'queryset': queryset})
return response
并从您的管理模型(在admin.py中)指向它
class SomeModelAdmin(admin.ModelAdmin):
actions = [confirm_my_action]
添加模板,该模板具有一个其动作指向my_action端点的表单。
{% extends "admin/base_site.html" %}
{% block content %}
<div id="content" class="colM delete-confirmation">
<form method="post" action="/admin/my_action/">
{% csrf_token %}
<div>
{% for obj in queryset %}
<input type="hidden" name="obj_ids[]" value="{{ obj.pk }}" />
<ul><li>Obj: ">{{obj}}</a></li></ul>
{% endfor %}
</div>
<input type="submit" value="Yes, I'm sure">
<a href="/admin/app/somemodel/" class="button cancel-link">No, take me back</a>
</form>
<br class="clear">
<div id="footer"></div>
</div>
{% endblock %}
添加适当的端点(例如urls.py中)。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^admin/my_action/', my_action_method),
]
答案 1 :(得分:0)
如果有人想要将确认视图添加到某个操作而不是某个操作。
我想将管理员创建视图保存到确认视图。我的模型非常复杂,对系统产生了很多影响。添加确认视图将确保管理员意识到这些影响。
解决方案将覆盖在创建和编辑时调用的某些_changeform_view
方法。
完整代码在此处:https://gist.github.com/rsarai/d475c766871f40e52b8b4d1b12dedea2
答案 2 :(得分:0)
admin.py
$array = new \ArrayObject(["a", "b"]);
$keys = array_keys((array)$array);
$end_key = end($keys);
var_dump($array[$end_key]);
admin / action_confirmation.html
function end_object($array){
$keys = array_keys((array)$array);
$end_key = end($keys);
return $array[$end_key];
}
$array = new \ArrayObject(["a", "b"]);
$item = end_object($array);
var_dump($item);