Django Admin Action Confirmation页面

时间:2017-05-05 13:06:15

标签: django django-admin

在我的Django项目中,我有一个需要确认页面的管理操作。我将它定位在delete_selected操作上,但它不起作用。这就是我所拥有的。

我的admin.py

的一部分
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

管理员/ my_action_confirmation.html

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函数?

3 个答案:

答案 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);