除了“更改列表”视图之外,是否有办法让自定义 Django 管理操作显示在“更改”视图上?

2023-12-23

我认为无论出于何种原因,这都很容易做到,但我更深入地研究,似乎没有直接的方法允许用户在实例的“更改”视图上执行自定义管理操作(即,当您只是查看编辑时)屏幕显示单个实例,而不是实例列表)。

我是否忽略了一种简单的方法来做到这一点?或者是我覆盖管理模板之一的唯一选择(可能还有ModelAdmin.add_view方法)?


这里是更新和改进this https://stackoverflow.com/a/2810894/1214350回答。它适用于 django 1.6 并重定向到您来自的地方。

class ActionInChangeFormMixin(object):
    def response_action(self, request, queryset):
        """
        Prefer http referer for redirect
        """
        response = super(ActionInChangeFormMixin, self).response_action(request,
                queryset)
        if isinstance(response, HttpResponseRedirect):
            response['Location'] = request.META.get('HTTP_REFERER', response.url)
        return response  

    def change_view(self, request, object_id, extra_context=None):
        actions = self.get_actions(request)
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = self.get_action_choices(request)
        else: 
            action_form = None
        extra_context=extra_context or {}
        extra_context['action_form'] = action_form
        return super(ActionInChangeFormMixin, self).change_view(request, object_id, extra_context=extra_context)

class MyModelAdmin(ActionInChangeFormMixin, ModelAdmin):
    ......

模板:

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

{% block extrastyle %}
  {{ block.super }}
  <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}" />
{% endblock %}

{% block object-tools %}
    {{ block.super }}
    <div id="changelist">
    <form action="{% url opts|admin_urlname:'changelist' %}" method="POST">{% csrf_token %}
        {% admin_actions %}
        <input type="hidden" name="_selected_action" value="{{ object_id }}">
    </form>
    </div>
{% endblock %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

除了“更改列表”视图之外,是否有办法让自定义 Django 管理操作显示在“更改”视图上? 的相关文章

随机推荐