Django:管理员在弹出窗口中更改表单,并保存并继续'

时间:2014-05-30 14:24:29

标签: django popup request admin

我正在使用django' ?_popup=1在弹出窗口中显示表单。默认情况下,该表单仅显示带有name=_save的提交按钮。这意味着保存页面后返回更改列表页面。

对于我的用例,我修改了它以使用带有name=_continue行为的提交按钮,这意味着它保留在编辑页面上。

保存后_popup丢失并且“非弹出式优化”#39;编辑页面显示在弹出窗口内。

我在response_change()(Django 1.6,ln 956)中挖掘contrib/admin/options.py方法。重定向似乎不再带有_popup变量。

有没有人知道如何使这项工作?可能我错过了一些东西,但这次谷歌搜索并没有为我做这件事。

2 个答案:

答案 0 :(得分:2)

有点hacky解决方案,但我没有找到更好的解决方案。由于response_change()中始终存在对request.path的重定向,因此我们可以通过更改它来做任何伤害。

class MyAdmin(admin.ModelAdmin):
    # ...
    def response_change(self, request, obj):
        if '_popup' in request.REQUEST:
            request.path += '?_popup=1'
        return super(MockupAreaAdmin, self).response_change(request, obj)

答案 1 :(得分:0)

https://github.com/django/django/blob/1.6/django/contrib/admin/options.py#L968

尝试覆盖:

def response_change(self, request, obj):
    ...
    return HttpResponseRedirect(redirect_url)           

为:

if "_popup" in request.REQUEST:
    return HttpResponseRedirect(request.path + "?_popup=1")
else:
    return HttpResponseRedirect(request.path)