在Django中的admin change_form中创建自定义按钮

bna*_*los 17 python django django-admin

我想在管理界面的添加/更改表单中添加自定义按钮.默认情况下,只有三个:

  • 保存并添加另一个

  • 保存并继续编辑

  • 保存

我在我的forms.py文件中创建了一些自定义方法,我想创建按钮来调用这些方法.我使用了片段http://djangosnippets.org/snippets/1842/,但这并不是我想要的.这个允许从admin.py文件创建按钮和调用方法,而不是forms.py.

有没有办法做到这一点?

这是我的admin.py代码:

class CategoryAdmin(admin.ModelAdmin):
    prepopulated_fields = { "alias": ("title",) }
    form = CategoryForm

admin.site.register(Category, CategoryAdmin)
Run Code Online (Sandbox Code Playgroud)

我的forms.py代码,

class CategoryForm(forms.ModelForm):
    """
    My attributes
    """
    def custom_method(self):
        print("Hello, World!")
Run Code Online (Sandbox Code Playgroud)

如何创建一个调用"custom_method()"的按钮?

Kar*_*jux 32

我发现添加按钮的一种简单方法是为自定义按钮添加另一行.根据您的需要在模板目录中创建管理目录.例如,我通常在自定义模板中添加特定模型的按钮.制作"templates/admin/app/model /"目录.

然后添加文件change_form.html.

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block submit_buttons_bottom %}
    <div class="submit-row">
       <input type="button" value="{% trans 'Another Button' %}" name="_anotherbutton" />
    </div>

    {{ block.super }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

之前的代码受模板标记使用{{ block.super }}submit_line.html模板的启发{% submit_row %}.我更喜欢这种方法,因为它很简单,但你必须使用另一排按钮.

在此输入图像描述

  • 如果您只想更改一个模型的管理员(目前您不能为此目的覆盖submit_line.html),这是最好的方法.如果希望按钮调用模型方法,则可以在模型管理中覆盖response_change. (3认同)

And*_*ker 19

你可以覆盖admin/change_form.html.将版本复制contrib.admin.templates到项目中.我的是myproject/templates/admin/change_form.html,但你可以使用/myproject/myapp/templates/admin/change_form.html.

接下来,编辑副本并更改对现有模板标记的两个引用{% submit_row %},以指向您自己的模板标记{% my_template_tag %}.

将模板标记基于contrib.admins {% submit_row %},但编辑HTML模板以包含要显示的任何额外按钮.


Jos*_*osh 7

更改表单中的提交按钮由submit_row模板标记呈现.此标记呈现模板admin/submit_line.html.由于您要添加到现有按钮,因此最佳(和DRYest)方法是覆盖admin/submit_line.html.

例如,my_project/templates/admin/submit_line.html使用以下内容创建文件:

{% load i18n admin_urls %}
<div class="submit-row">
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" {{ onclick_attrib }}/>{% endif %}
{% if show_delete_link %}<p class="deletelink-box"><a href="{% url opts|admin_urlname:'delete' original.pk|admin_urlquote %}" class="deletelink">{% trans "Delete" %}</a></p>{% endif %}
{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" {{ onclick_attrib }}/>{%endif%}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" {{ onclick_attrib }}/>{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" {{ onclick_attrib }}/>{% endif %}

<input type="submit" value="{% trans 'New button 1' %}" name="_button1" {{ onclick_attrib }}/>
<input type="submit" value="{% trans 'New button 2' %}" name="_button2" {{ onclick_attrib }}/>
</div>
Run Code Online (Sandbox Code Playgroud)

上面的大部分内容都是从中复制而来的django/contrib/admin/templates/submit_line.html.if如果您只想在某些情况下显示其他按钮,也可以在模板中添加其他语句.