如何在Django管理表单中添加自定义操作按钮并发布信息

lhcgjxsq  于 2023-02-10  发布在  Go
关注(0)|答案(2)|浏览(402)

我是新来的 Django !
我用的是Django Admin,我怎样才能创建一个新的按钮(保存附近),发布信息,并在python脚本中使用它(我用的是Django version 2)。
admin.py:

admin.site.register(Router)
admin.site.register(Peer, PeerModelAdmin)
admin.site.register(Prefixe, PrefixModelAdmin)
lkaoscv7

lkaoscv71#

您需要重写change_form_template。尝试如下操作:

class YourModelAdmin(admin.ModelAdmin):
    change_form_template = 'custom_change_form.html'

custom_change_form.html中,它应该从admin/change_form.html扩展,可以是这样的:

{% load i18n %}
{% extends 'admin/change_form.html' %}
    <button> Your Custom Button </button>
    <input type="submit" value="{% trans 'Save' %}" class="default" name="_save">
{% endblock %}
sy5wg1nm

sy5wg1nm2#

您可以将自定义按钮添加到特定管理员的**“添加”表单“更改”表单**。
首先,关于如何向特定管理员的**“添加”表单“更改”表单添加自定义按钮,请参见如何在特定管理员的“添加”表单和“更改”表单底部添加自定义按钮如何在特定管理员的“添加”表单和“更改”表单上的“保存”按钮旁边添加自定义按钮**
接下来,在**“类PersonAdmin(admin.ModelAdmin):“中为“添加”表单设置“响应_添加()”,为“更改”表单设置“响应_更改()”,以定义按下自定义按钮后的操作,如下所示。* 无论是否设置“响应_添加()"“响应_更改()"**,按下自定义按钮后,将保存输入到字段中的数据:

# "admin.py"

from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    change_form_template = "admin/custom_change_form.html"
    
    def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
        extra_context = extra_context or {}
        
        extra_context['custom_button'] = True
        
        return super().changeform_view(request, object_id, form_url, extra_context)

    def response_add(self, request, obj, post_url_continue=None):

        if "_custom_button" in request.POST:
            # Do something
            return super().response_add(request, obj, post_url_continue)
        else:
            # Do something
            return super().response_add(request, obj, post_url_continue)

    def response_change(self, request, obj):
        
        if "_custom_button" in request.POST:
            # Do something
            return super().response_change(request, obj)
        else:
            # Do something
            return super().response_change(request, obj)

相关问题