【问题标题】:Django extra button in a model's changelist for Django AdminDjango Admin 模型更改列表中的 Django 额外按钮
【发布时间】:2020-03-25 16:40:52
【问题描述】:

所以我想在我的 Fun 模型的 changelist_view 中添加一个额外的按钮,当按下它时,它会执行一个功能并将我重定向到一个新页面。我不想为每个应用程序提供此功能,也不想为每个模型提供此功能,只有Fun 模型。我将使用 Django Admin 来查看这个变更列表,只是一个旁注。

任何人都可以提出任何建议吗?谢谢。

【问题讨论】:

  • 你可以使用admin actions
  • 感谢您对 Pedram Parsian 的评论。我已经考虑过了,但我正在寻找一个物理的button,我可以点击它(就像添加按钮旁边的一个按钮)来执行我的操作。
  • 因此您可以自定义 change_list_template,添加您的按钮并将其链接到您的视图。基本上,你应该添加类似<a href="{% url 'your_url' %}">My Button</a>
  • 这不会违背使用 Django Admin 的目的吗?您能否在答案中展示一个可行的示例?
  • 是否可以仅为特定模型或其他内容添加覆盖模板?

标签: django django-views django-admin


【解决方案1】:

fun/admins.py

中的代码
from django.contrib import admin
from .models import Fun


@admin.register(Fun)
class FunAdmin(admin.ModelAdmin):
    change_list_template = 'fun/admin_changelist.html'

对于 fun/admin_changelist.html 模板:

{% extends "admin/change_list.html" %}
{% load i18n admin_static admin_list %}

{% block result_list %}
  <a href="{% url 'your-url-name here' %}">The custom button</a>
  {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
  {% result_list cl %}
  {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
{% endblock %}

覆盖管理模板非常好,但不建议(完全)替换它们;所以我们将只覆盖我们需要的部分(这里我假设你的按钮将位于列表的顶部,所以我只覆盖result_list 块)

那么你应该有一个链接到视图的带有name="your-url-name here" 的url。

查看more details的文档

【讨论】:

  • 啊啊!那整齐。谢谢佩德拉姆。另外,单击按钮时如何执行操作?就像假设按下按钮时我想print("Button Pressed")。我该怎么做?
  • 当按钮被点击时,它将在关联视图中运行名为your-url-name here 的 URL 的代码(参见模板代码)。所以你可以把你的代码放在那里。
  • 如果你不能让它如你所愿地工作,请告诉我。
  • 谢谢Pedram,你帮了我很多。但这只是我不明白的一点点。由于我只想执行一个功能并保持在同一页面上,我不明白如何解决这个问题。我是否要创建一个视图,将我的功能放入其中,一旦完成,就重定向回我的页面?
  • @AnthonyMartinez 是的,你应该重定向回同一页面 - 检查this;如果你不想在点击按钮时看到页面刷新,你可以使用ajax调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 2019-10-20
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多