Django管理员在详细视图中的操作?

时间:2015-11-17 17:31:20

标签: python django django-admin

我在我的(相当标准的)Django应用程序中定义了一些管理操作。如果它们在对象的详细信息页面上可用,那么其中一些操作也会很有意义。

现在,用户需要导航回列表,然后搜索特定记录,然后触发操作。

有没有办法在详细信息页面上公开此功能?

3 个答案:

答案 0 :(得分:1)

Here是您要寻找的答案。

基本上,您将创建一个 yourmodel_changeform.html 文件,其中包含以下内容:

{% extends 'admin/change_form.html' %}

{% block submit_buttons_bottom %}
    {{ block.super }}
    <div class="submit-row">
        <input type="submit" value="Button Label" name="_your-action-name">
    </div>
{% endblock %}

然后在ModelAdmin类上覆盖 response_change 方法并设置change_form_template属性。

from django.http import HttpResponseRedirect

class YourModelAdmin(admin.ModelAdmin):

    change_form_template = "templatelocation/yourmodel_changeform.html"

    def response_change(self, request, obj):
        if "_your-action-name" in request.POST:
            # do whatever you want the button to do
            obj.name = "new name"
            obj.save()
            return HttpResponseRedirect(".")  # stay on the same detail page
        return super().response_change(request, obj)

在Django 3.0.3上测试

答案 1 :(得分:0)

如果我理解正确,您需要做的是编写一些单独的html,然后在{% include '/path/foo.html' %}的不同页面上使用它。 Here更多关于此主题。

foo.html中,您可以添加要在不同页面(表单,链接等)上使用的任何功能。

如果您想要更详细的答案,那么很高兴看到您的代码以及您想要做什么。

答案 2 :(得分:0)

详细说明pythad。

1添加另一个简单的html,扩展您的管理员html并保存描述管理员操作的按钮。你可以称之为change_form.py 确保strt与:

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

2您需要在admin.py中添加小功能,以便将按钮连接到动作功能。 somthong喜欢:

        try:
            sr = Scenario.objects.filter(pk = pk)
            queitem = QueueScript.objects.filter(scriptresult__pk=sr.scriptreport.pk)
        #do somtho

        return HttpResponseRedirect(request.META["HTTP_REFERER"])

3你需要详细说明/覆盖admins get_urls函数来了解上面的函数:

def get_urls(self, ):
    urls = super(ScenarioAdmin, self).get_urls()
    my_urls = patterns("",
        url(r"(?P<pk>\d+)/stop_my_script/$",
                           self.stop_my_script),
        url(r"(?P<pk>\d+)/run_scenario_standalone/$",
                           self.run_scenario_standalone),
                       )

    return my_urls + urls

4并最终在admin.py

中详细说明了你的change_view func
  def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = {}
        extra_context['show_scer_buttons'] = True
        extra_context['is_running'] = self.choose_template_buttons(object_id, extra_context)
        return super(ScenarioAdmin, self).change_view(request, object_id,
            form_url, extra_context=extra_context)