我想在管理员更改表单的SAVE按钮旁边添加一个自定义按钮。我尝试在submit_line.html
中添加一个按钮<input type="submit" action = "admin/{{id??}}" value="show PDF" name="show PDF{{ onclick_attrib }}/>
但它没有重定向到我的指定页面,我也不知道如何传递当前的ID。 实际上我不认为改变submit_line.html是个好主意,因为我只想在一个模型中使用它。那有更好的解决方案吗?
答案 0 :(得分:2)
我认为你可以添加自己的逻辑。在这里,您可以查看app详细名称,仅在您的应用中显示该按钮:
{% if opts.verbose_name == 'Your app verbose name' %}<input type="submit" value="{% trans 'Show PDF' %}" name="_show_pdf" {{ onclick_attrib }}/>{% endif %}
并在您的admin.py中:
class YourAdmin(admin.ModelAdmin):
def response_change(self, request, obj):
if '_continue' in request.POST:
return HttpResponseRedirect(obj.get_admin_url())
elif '_show_pdf' in request.POST:
# Do some stuf here( show pdf in your case)
答案 1 :(得分:0)
Django1.10:
我会这样做,以避免接受的答案的冗长和额外的模板处理
1)在应用的模板目录中扩展admin/change_form.html
(我希望你的应用模板命名为空间)并覆盖阻止submit_row
:
{% extends "admin/change_form.html" %}
{% block submit_row %}
<div class="submit-row">
{% if extra_buttons %}
{% for button in extra_buttons %}
{{ button }}
{% endfor %}
{% endif %}
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />{% endif %}
{% if show_delete_link %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}
{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %}
</div>
{% endblock %}
当然,这假设button
的字符串表示形式是适当的浏览器input
或button
元素,并使用django.utils.safestring.mark_safe
标记为安全。或者,您可以使用safe
模板过滤器或直接访问button
的属性来构建<input>
。在我看来,最好将这些东西隔离到python级别。
2)覆盖MyModelAdmin.change_view
和MyModelAdmin.change_form_template
:
change_form_template = "my_app/admin/change_form.html"
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or self.extra_context()
return super(PollAdmin, self).change_view(
request, object_id, form_url, extra_context=extra_context,
)
答案 2 :(得分:0)
在我的情况下,我只需要用户在保存后才执行自定义操作,例如“添加另一个”,其他按钮(例如“导出为pdf”),所以我将它们放在更改列表中,因为添加按钮非常容易
如果您在这里遇到像我这样的情况,内置消息框架将解决问题。
添加响应消息很简单,您将需要覆盖
管理类save_model
如下:
from django.utils.safestring import mark_safe
def save_model(self, request, obj, form, change):
# if new model
if not change:
message_html = "<a href='http://yourSITE/admin/appname/appmodel/add/'>Add another</a>"
messages.add_message(request, messages.INFO, mark_safe(message_html))
super(YourAdminClass, self).save_model(request, obj, form, change)
有4种不同类型的消息(我更改了INFO的CSS),它们显示在屏幕截图中