Django管理网站很棒,我们在工作中使用它很多。我的问题是 - 如何在底部添加一个额外的按钮,“保存”,“保存并继续编辑”等按钮,保存模型,然后重定向到可用的“现场视图”按钮在表单的右上角是否有定义的模型?
提前致谢!
答案 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
现在将以这种特殊形式显示它,对其他模型也是如此,只需覆盖上面的两种方法即可。