【发布时间】:2012-01-25 15:11:59
【问题描述】:
Django 管理站点非常棒,我们在工作中经常使用它。我的问题是这个 - 我如何在底部添加一个额外的按钮,旁边是“保存”、“保存并继续编辑”等按钮,保存模型,然后重定向到可用的“现场查看”按钮对于已定义的模型,在表单的右上角?
提前致谢!
【问题讨论】:
标签: django django-admin
Django 管理站点非常棒,我们在工作中经常使用它。我的问题是这个 - 我如何在底部添加一个额外的按钮,旁边是“保存”、“保存并继续编辑”等按钮,保存模型,然后重定向到可用的“现场查看”按钮对于已定义的模型,在表单的右上角?
提前致谢!
【问题讨论】:
标签: django django-admin
除了在 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。首先覆盖submit_line.html模板,在主模板文件夹下创建一个自定义模板:my_project/templates/admin/submit_line.html,从原始模板复制内容并将自定义按钮添加到submit-row块(默认情况下不会显示,因为它是设置为假):
# 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
现在它会为这个特定的表单显示,对其他模型做同样的事情,只需覆盖上面的两个方法。
【讨论】: