我想在管理界面的添加/更改表单中添加自定义按钮。默认情况下,只有三个:
保存并添加其他
保存并继续编辑
保存
我在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)
我的forms.py
代码,
class CategoryForm(forms.ModelForm):
"""
My attributes
"""
def custom_method(self):
print("Hello, World!")
如何创建一个调用“custom_method()”的按钮?
答案 0 :(得分:28)
我发现添加按钮的一种简单方法是为自定义按钮添加另一行。根据您的需要在模板目录中创建管理目录。例如,我通常在自定义模板中添加特定模型的按钮。制作一个“templates / admin / app / model /”目录。
然后添加文件 change_form.html 。
Row
CheckBox
之前的代码受模板标记CheckBox
使用的 submit_line.html 模板的启发。我更喜欢这种方法,因为它很简单,但你必须使用另一排按钮。
答案 1 :(得分:18)
您可以覆盖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.admin
的{{1}},但编辑HTML模板以包含您要显示的任何额外按钮。
答案 2 :(得分:6)
更改表单中的提交按钮由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>
上面的大部分内容都是从django/contrib/admin/templates/submit_line.html
复制的。如果您只想在某些情况下显示其他按钮,还可以在模板中添加其他if
语句。