Django管理员“保存并在网站上查看”按钮

时间:2011-12-21 20:38:48

标签: django django-admin

Django管理网站很棒,我们在工作中使用它很多。我的问题是 - 如何在底部添加一个额外的按钮,“保存”,“保存并继续编辑”等按钮,保存模型,然后重定向到可用的“现场视图”按钮在表单的右上角是否有定义的模型?

提前致谢!

2 个答案:

答案 0 :(得分:7)

除了在change_form模板中添加按钮外,您还希望覆盖ModelAdmin的response_change方法(以及response_add)。

这样的事情应该有效:

def response_change(self, request, obj):
  res = super(MyModelAdmin, self).response_change(request, obj)
  if "_preview" in request.POST:
    return HttpResponseRedirect('preview-url-here')
  else:
    return res

答案 1 :(得分:0)

为此,还可以选择针对某些模型形式显示/隐藏它,这是我所做的:

1。首先,在主模板文件夹submit_line.html下创建一个自定义模板,以覆盖my_project/templates/admin/submit_line.html模板,复制原始模板中的内容,然后将自定义按钮添加到submit-row块中(不会由于设置为False,因此默认显示):

# submit_line.html

{% load i18n admin_urls %}
<div class="submit-row">
{% block submit-row %}
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %}
...
...
...
{% if show_save_and_preview|default:False %}<input type="submit" value="{% trans 'Save and preview' %}" name="_preview">{% endif %}
{% endblock %}
</div>


2.接下来,为简单显示某些模型,只需覆盖您的ModelAdmin方法:

changeform_view:在模板上显示按钮。

response_change:设置保存后重定向到的位置。

# admin.py

class MyModelAdmin(admin.ModelAdmin):
    # ..
    # ..

    def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['show_save_and_preview'] = True
        return super(MyModelAdmin, self).changeform_view(request, object_id, extra_context=extra_context)

    def response_change(self, request, obj):
        res = super(MyModelAdmin, self).response_change(request, obj)
        if "_preview" in request.POST:
            # used object's custom method "get_url()":
            return HttpResponseRedirect(obj.get_url())
        else:
            return res

现在将以这种特殊形式显示它,对其他模型也是如此,只需覆盖上面的两种方法即可。