保存时关闭django admin添加相关对象弹出窗口

保存时关闭django admin添加相关对象弹出窗口,django,django-admin,Django,Django Admin,在django admin中,当用户成功保存(在我的clean方法之后)在弹出窗口中编辑的新的或更改的相关对象时,我希望弹出窗口关闭,而不是转到其他视图 我相信我可以使用response\u change或response\u add让它转到另一个视图,但有没有办法让窗口关闭?看看原始的response\u change或response\u add方法的功能:它们返回一段javascript,在父窗口中调用JS方法,这将关闭弹出窗口 return HttpResponse(''' <

在django admin中,当用户成功保存(在我的clean方法之后)在弹出窗口中编辑的新的或更改的相关对象时,我希望弹出窗口关闭,而不是转到其他视图


我相信我可以使用response\u change或response\u add让它转到另一个视图,但有没有办法让窗口关闭?

看看原始的
response\u change
response\u add
方法的功能:它们返回一段javascript,在父窗口中调用JS方法,这将关闭弹出窗口

return HttpResponse('''
   <script type="text/javascript">
      opener.dismissAddAnotherPopup(window);
   </script>'''

(原始版本传递了更多参数,因此它使用新对象更新父窗口,但如果您只想关闭窗口,则不需要更新。)

Daniel提供的解决方案存在潜在错误,请参阅此Django。也就是说,如果您使用的是
应用程序/xhtml
,那么如果只返回脚本,窗口将不会关闭。这个bug已经在Django中修复了

更好的方法是添加
标记,如当前的Django:

“”
'opener.dismissAddAnotherPopup(窗口,'%s','%s');'%\
#escape()调用force_unicode。
(escape(pk_值),escapejs(obj)))
function dismissAddAnotherPopup(win) {
    win.close();
}
'<!DOCTYPE html><html><head><title></title></head><body>'
'<script type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", "%s");</script></body></html>' % \
# escape() calls force_unicode.
(escape(pk_value), escapejs(obj)))