【发布时间】:2018-07-19 06:04:47
【问题描述】:
我想在 django 管理员更改列表页面上的每一行添加一个按钮。单击该按钮时,我想在某个数据库表中输入条目(所有这些都发生在后端),然后应在同一页面上针对该行禁用该按钮。
我怎样才能做到这一点?我已经搜索了很多按钮没有可用的解决方案。
【问题讨论】:
标签: django python-3.x django-templates django-admin
我想在 django 管理员更改列表页面上的每一行添加一个按钮。单击该按钮时,我想在某个数据库表中输入条目(所有这些都发生在后端),然后应在同一页面上针对该行禁用该按钮。
我怎样才能做到这一点?我已经搜索了很多按钮没有可用的解决方案。
【问题讨论】:
标签: django python-3.x django-templates django-admin
您将不得不在生成结果项的位置(靠近底部)编辑changelist_result_list 模板,以添加一个引发请求的元素。例如:
<tr class="{% cycle 'row1' 'row2' %}">
{% for item in result %}
{{ item }}
<!-- NEW STUFF --->
{% if forloop.last %}
<td>{% if pk %}<a href="do_things_with_object_{{pk}}">CLICK ME</a>{% endif %}</td>
{% endif%}
{% endfor %}
</tr>
(不要忘记进一步更新表格标题)
您将不得不通过混淆django.contrib.admin.template_tags.admin_list 中的模板标签result_list 来为{{pk}} 提供模板上下文变量——这意味着您正在为此创建your own templatetag。
然后你需要设置一个视图和一个 url conf 来处理链接发送的请求。
假设您在foo/bar,然后单击pk=2 所在行的链接。将为 foo/bar/do_things_with_object_2 发送 GET 请求。
您的 url conf 需要捕获 pk(和模型,此处为:bar),并且您的视图需要在对象上执行您想要的任何操作。
【讨论】: