如何使用自定义按钮而不是使用 Django 管理中的保存按钮来保存模型数据
How to save model data using custom button instead of using Save button in Django admin
我想在管理表单中添加自定义按钮 X 和保存按钮,每当我单击按钮 X 时,我想保存当前数据并发送电子邮件。
我不想在每次保存后发送电子邮件,所以无法使用 post_save
信号。我能够添加自定义按钮。如何在详细信息页面中为按钮 X 添加此功能?
您可以覆盖 admin/change_form.html,查看如何 Overriding admin templates
在admin/change_form.html
中,你可以找到这一行:
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
{% submit_row %}
是呈现按钮列表的地方,您可以从扩展 change_form
开始添加新按钮:
{% extends 'admin/change_form.html' %}
{% block submit_buttons_bottom %}
{{ block.super }} <!-- or simply {% submit_row %} -->
<div class="submit-row">
<input type="submit" value="X" name="_button_x">
</div>
{% endblock %}
添加新按钮后,您可以指定要用于更改页面的模板。
response_change
is called after the admin form is submitted and just
after the object and all the related instances have been saved. You
can override it to change the default behavior after the object has
been changed.
@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
# specify the new template you would like to use
change_form_template = "<change_form_template>"
def response_change(self, request, obj):
if "_button_x" in request.POST:
# customization here
...
return super().response_change(request, obj)
你可以阅读更多here
我想在管理表单中添加自定义按钮 X 和保存按钮,每当我单击按钮 X 时,我想保存当前数据并发送电子邮件。
我不想在每次保存后发送电子邮件,所以无法使用 post_save
信号。我能够添加自定义按钮。如何在详细信息页面中为按钮 X 添加此功能?
您可以覆盖 admin/change_form.html,查看如何 Overriding admin templates
在admin/change_form.html
中,你可以找到这一行:
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
{% submit_row %}
是呈现按钮列表的地方,您可以从扩展 change_form
开始添加新按钮:
{% extends 'admin/change_form.html' %}
{% block submit_buttons_bottom %}
{{ block.super }} <!-- or simply {% submit_row %} -->
<div class="submit-row">
<input type="submit" value="X" name="_button_x">
</div>
{% endblock %}
添加新按钮后,您可以指定要用于更改页面的模板。
response_change
is called after the admin form is submitted and just after the object and all the related instances have been saved. You can override it to change the default behavior after the object has been changed.
@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
# specify the new template you would like to use
change_form_template = "<change_form_template>"
def response_change(self, request, obj):
if "_button_x" in request.POST:
# customization here
...
return super().response_change(request, obj)
你可以阅读更多here