Django应用程序,可轻松创建额外的管理对象工具。
项目描述
Django Object Tools
Django应用程序,可轻松创建额外的管理对象工具。
需求
Python 2.7, 3.5-3.7
Django 1.11, 2.0, 2.1
安装
将django-object-tools安装或添加到您的Python路径中。
将object_tools添加到您的INSTALLED_APPS设置中。django-object-tools会覆盖某些管理模板,因此您必须在其前面添加它,即django.contrib.admin。
连接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) ]
显然,Django Admin自身需要安装,具体请参阅此处。
每次安装新工具时,请记住运行migrate来设置权限。
使用
django-object-tools本身在提供有用工具方面并不做什么。它的目的是简化由其他Django应用程序提供的自定义工具的创建和集成。为此,它负责处理诸如权限和管理模板集成等繁琐的细节,让您可以专注于有趣的事情。
作为一个例子,让我们创建一个允许您删除所有对象的工具。是的,这有点复杂,但它是一个很好的玩具示例,用于说明目的。查看django-export和django-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)
让我们逐行分析
object_tools的行为类似于Django的admin,允许您显式注册工具,请参阅第17行。它还提供了ObjectTool基类。
导入Django提供的delete_selected方法。这个方法将做所有繁重的工作。
创建一个继承自object_tools.ObjectTool的工具类。所有对象工具都必须继承自object_tools.ObjectTool。ObjectTool提供了各种方法来简化工具的创建。有关更多详细信息,请参阅object_tools.options.py。
将工具名称设置为delete。这必须是一个唯一名称,用于标识工具。这用于在内部唯一标识工具以及设置权限。
将标签设置为Delete all。标签在admin中显示,而不是名称,因此您可以指定一个更详细、更友好的标签。
实现view方法。这是您的工具的大脑。当用户执行您的工具时,会调用view方法,因此您的工具逻辑应该在这里。这可以是任何返回HttpResponse对象的视图代码。在这种情况下,我们包装Django内置的delete_selected以提供表单、逻辑和模板代码来执行实际删除。
使用object_tools注册工具,从而使其在admin中显示。
要启用工具,请将delete添加到您的INSTALLED_APPS设置中。
现在,当您导航到任何模型的更改列表视图时,您将在右上角找到delete all对象工具。
单击delete all工具将触发视图并按常规删除对象。
注意: django-object-tools 为内置默认Django权限集添加了每个工具的权限。因此,在这个例子中,只有超级用户或者具有“可以删除 <模型>”权限的用户才能查看和使用该工具。如果您看不到或无法使用某个特定工具,请确保认证用户有执行该操作所需的权限。
变更日志
2.00
Django 2.0 & 2.1 兼容性。
添加了coveralls。
弃用了对Django 1.11以下版本的支持。
1.11
Django 1.11 兼容性。
弃用了对Django 1.9以下版本的支持。
1.9
Django 1.9 兼容性。
1.0.3
修复了Django 1.4 templatetag问题。
1.0.2
Django 1.7 兼容性。
1.0.1
修复了与Django 1.5+ url templatetags的兼容性问题。
1.0.0
#. 修复了与Django新版本的兼容性问题。然而,这可能与Django 1.4之前的版本不兼容。
0.0.7
将上下文传递给object_tools标签。感谢 slafs
0.0.6
修复了“str”对象没有属性“has_perm”的错误 #7。
0.0.5
在模板中移除“ADMIN_STATIC_PREFIX”的使用,以便迁移到Django 1.4。
0.0.4
更好的打包。
0.0.3 (2011-09-15)
正确解析标题。
0.0.1 (2011-07-22)
初始发布。
项目详情
django-object-tools-2.0.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ce7321be9cf757c630555a21fa21b497dd676df282ae99821e40d0851532972 |
|
MD5 | f60cb1b5f3e177031ed67bfd609c8c08 |
|
BLAKE2b-256 | da3e74da69bef308656b4bd31d2ba1650b39ae63a33d048dd684f1f56fb42fbd |