跳转到主要内容

Django应用程序,可轻松创建额外的管理对象工具。

项目描述

Django Object Tools

Django应用程序,可轻松创建额外的管理对象工具。

https://travis-ci.org/praekelt/django-object-tools.svg https://coveralls.io/repos/github/praekelt/django-object-tools/badge.svg?branch=develop https://badge.fury.io/py/django-object-tools.svg docs/images/example-tools.png

需求

  1. Python 2.7, 3.5-3.7

  2. Django 1.11, 2.0, 2.1

安装

  1. django-object-tools安装或添加到您的Python路径中。

  2. object_tools添加到您的INSTALLED_APPS设置中。django-object-tools会覆盖某些管理模板,因此您必须在其前面添加它,即django.contrib.admin

  3. 连接URLConf。通过将给定的URL指向tools.urls方法来完成此操作。在这个例子中,我们将默认的Tools实例object_tools.tools注册到URL/object-tools/

    # urls.py
    from django.conf.urls.defaults import *
    from  django.conf.urls import url
    import object_tools
    
    urlpatterns = [
        path('object-tools/', object_tools.tools.urls)
    ]
  4. 显然,Django Admin自身需要安装,具体请参阅此处

  5. 每次安装新工具时,请记住运行migrate来设置权限。

使用

django-object-tools本身在提供有用工具方面并不做什么。它的目的是简化由其他Django应用程序提供的自定义工具的创建和集成。为此,它负责处理诸如权限和管理模板集成等繁琐的细节,让您可以专注于有趣的事情。

作为一个例子,让我们创建一个允许您删除所有对象的工具。是的,这有点复杂,但它是一个很好的玩具示例,用于说明目的。查看django-exportdjango-order,了解如何使用django-object-tools的真正工具。

首先,根据常规方式创建Django应用程序文件夹结构,根目录命名为delete,包括一个名为tools.py的文件。它应该看起来如下所示

delete/
    __init__.py
    tools.py

编辑tools.py以如下所示

from django.contrib.admin.actions import delete_selected
from django.contrib.admin.sites import site
import object_tools

class Delete(object_tools.ObjectTool):
    name = 'delete'
    label = 'Delete all'

    def view(self, request, extra_context=None):
        queryset = self.model.objects.all()
        modeladmin = site._registry.get(self.model)
        response = delete_selected(modeladmin, request, queryset)
        if response:
            return response
        else:
            return modeladmin.changelist_view(request)

object_tools.tools.register(Delete)

让我们逐行分析

  1. object_tools的行为类似于Django的admin,允许您显式注册工具,请参阅第17行。它还提供了ObjectTool基类。

  1. 导入Django提供的delete_selected方法。这个方法将做所有繁重的工作。

  1. 创建一个继承自object_tools.ObjectTool的工具类。所有对象工具都必须继承自object_tools.ObjectToolObjectTool提供了各种方法来简化工具的创建。有关更多详细信息,请参阅object_tools.options.py

  2. 将工具名称设置为delete。这必须是一个唯一名称,用于标识工具。这用于在内部唯一标识工具以及设置权限。

  3. 将标签设置为Delete all。标签在admin中显示,而不是名称,因此您可以指定一个更详细、更友好的标签。

  1. 实现view方法。这是您的工具的大脑。当用户执行您的工具时,会调用view方法,因此您的工具逻辑应该在这里。这可以是任何返回HttpResponse对象的视图代码。在这种情况下,我们包装Django内置的delete_selected以提供表单、逻辑和模板代码来执行实际删除。

  1. 使用object_tools注册工具,从而使其在admin中显示。

要启用工具,请将delete添加到您的INSTALLED_APPS设置中。

现在,当您导航到任何模型的更改列表视图时,您将在右上角找到delete all对象工具。

docs/images/delete-example-final.png

单击delete all工具将触发视图并按常规删除对象。

注意: django-object-tools 为内置默认Django权限集添加了每个工具的权限。因此,在这个例子中,只有超级用户或者具有“可以删除 <模型>”权限的用户才能查看和使用该工具。如果您看不到或无法使用某个特定工具,请确保认证用户有执行该操作所需的权限。

作者

Praekelt Consulting

  • Shaun Sephton

变更日志

2.00

  1. Django 2.0 & 2.1 兼容性。

  2. 添加了coveralls。

  3. 弃用了对Django 1.11以下版本的支持。

1.11

  1. Django 1.11 兼容性。

  2. 弃用了对Django 1.9以下版本的支持。

1.9

  1. Django 1.9 兼容性。

1.0.3

  1. 修复了Django 1.4 templatetag问题。

1.0.2

  1. Django 1.7 兼容性。

1.0.1

  1. 修复了与Django 1.5+ url templatetags的兼容性问题。

1.0.0

#. 修复了与Django新版本的兼容性问题。然而,这可能与Django 1.4之前的版本不兼容。

0.0.7

  1. 将上下文传递给object_tools标签。感谢 slafs

0.0.6

  1. 修复了“str”对象没有属性“has_perm”的错误 #7

0.0.5

  1. 在模板中移除“ADMIN_STATIC_PREFIX”的使用,以便迁移到Django 1.4。

0.0.4

  1. 更好的打包。

0.0.3 (2011-09-15)

  1. 正确解析标题。

0.0.1 (2011-07-22)

  1. 初始发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

django-object-tools-2.0.0.tar.gz (31.9 kB 查看哈希)

上传时间

由以下机构支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页