一个django应用程序,用于为管理中的模型添加对象工具

django-object-actions的Python项目详细描述


django对象操作图片::https://travis ci.org/crccheck/django object actions.png
:目标:https://travis ci.org/crccheck/django object actions

…图片::https://coveralls.io/repos/crccheck/django object actions/badge.png
:target:https://coveralls.io/r/crccheck/django object actions

为什么它们不能像执行
django管理操作那样简单?现在可以了。



《快速入门指南》
---------


objectactions



class article admin(djangoobjectactions,admin.modeladmin):
def publish_this(self,request,obj):
publish_obj(obj)
publish_this.label="publish"可选
publish_this.short_description="submit this article"可选




usage
----


>定义新的工具操作就像定义常规的"管理操作"一样
<;https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/>;`。主要的
区别在于为更改视图编写的操作函数将采用
对象实例而不是queryset(请参见下面的*重新使用管理操作*)。

tool actions是通过将它们放在
模型管理的"更改操作"属性中来公开的。您还可以将工具操作添加到变更列表视图。
您将获得一个类似于常规管理操作的查询集::


from django_object_actions import djangoobjectactions

class mymodeladmin(djangoobactions,admin.modeladmin):
def toolfunc(self,request,obj):
pass
toolfunc.label="这将是按钮的标签"可选
toolfunc.short_description="这将是按钮的工具提示"可选


def make懔u published(modeladmin,request,queryset):
queryset.update(status='p')

change懔actions=('toolfunc',)
changelist懔actions=('make懔pu actions=('make懔published',)

就像管理操作一样,您可以用"self.message\u user"发送消息。
通常,您会对对象执行某些操作并返回到同一个位置,但是如果您返回一个httpresponse,它会跟随它(嘿,就像管理操作一样!)


br/>>如果您的管理员修改了``get\u url`````````change\u view`````````````````````````````````````````````````````````````>






如果您希望先前存在的管理操作同时也是一个更改操作,请添加
`` take``takes```````````````````````````````````````````````

来自django_object_actions导入(djangoobjectactions,
采用实例_或_queryset)


类robotadmin(djangoobjectactions,admin.modeladmin):
狙击……


@take-instance-cuu或queryset
def拧紧凸耳螺母(self、请求、queryset):
queryset.update(lugnututs=f('lug nuts')-1)


chang-actions=[‘拧紧凸耳螺母’]
actions=[‘拧紧凸耳螺母’]
定制管理操作
`````````````````````````````````````````````````````````````````````````````````

至GIVe操作一些有用的标题工具提示,添加一个"short-description"属性,类似于管理操作的工作方式::


def increment-vote(self,request,obj):
obj.vots=obj.vots+1
obj.save()
increment-vote.short-description="increment the vote count by one"

actions将根据功能。您可以用一个"label"属性来覆盖它:


def increment\u vote(self,request,obj):
obj.vots=obj.vots+1
obj.save()
increment\u vote.label="vote++"

添加django小部件样式的"attrs"属性::

def increment掴vote(self,request,obj):
obj.vots=obj.vots+1
obj.save()
increment掴vote.attrs={
"class":"addlink",



``````````````````````````````````

您可以通过定义自己的自定义
``get_change_actions()``方法以编程方式禁用已注册的操作。在此示例中,某些操作仅适用于特定对象状态(即,如果帐户已关闭,则您不应关闭公司帐户):



def get_change_actions(self、request、object_id、form_url):
actions=super(polladmin、self)。get_change_操作(请求、对象id、表单url)
操作=列表(操作)
如果不是请求,则为用户超级用户:
返回[]

obj=self.model.objects.get(pk=对象id)
如果是obj.question.endswith('?')用法:
actions.remove('question-mark')

return actions

要做的是复制模板django object actions/change_form.html `` django的某个地方
template loader`将找到它
<;https://docs.djangoproject.com/en/dev/ref/settings/template dirs>;`.

如果您根本不打算使用模板定制,请不要添加
`` django_object_actions``到您的``installed_apps``中,并使用
``basedjangoobjectactions``而不是'djangoobjectactions``.




更多示例
----

django.http导入httpresponseredit
url=f'https://example.com/{obj.id}'
返回httpresponseredit(url)




`` django object actions``期望函数是模型管理的方法。
而django为它们的管理操作提供了更多的选项。

2.如果您提供了自己的自定义"change-form.html",则还需要在"我们的更改表单"的相关位中手动复制
<;https://github.com/crccheck/django-obj ect-actions/blob/master/django-obj
ect-actions/templates/django-object-actions/change-form.html>;`。您也可以使用"from django_object_actions import basedjangoobjectactions"来代替。安全性。本文假设django管理员中的每个人都属于这里。权限应该在您自己的
操作中强制执行,与此无关。更好的默认安全性是
为将来规划的。



demo-admin&docker-images
----


您可以使用这些docker对多个版本的django试用demo-admin
images:https://hub.docker.com/r/crccheck/django-object-actions/

这将运行基于
"polls"教程的`./example_project``中的示例django项目。`` admin.py``演示如何使用此应用程序。



升级virtualenv(使用virtualenvwrapper)
mkvirtualenv django对象操作
#修改您的路径,以便我们可以引用从根目录开始的包
add2virtualenv.
使测试运行测试套件
使快速启动运行'make resetdb'和一些额外步骤

这将安装django的最新稳定版本。您还可以安装特定版本的django和"pip install-r requirements.txt"。

make命令提供了各种帮助程序。键入"make help"并查看"makefile"以查看您可以执行的其他操作。




最小行操作>;`.

django对象操作与
`django对象工具<;https://github.com/praekelt/django对象工具>;`,
非常相似,但不需要修改URL.py,不做任何具有权限的特殊操作,使用与生成"admin
操作<;https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/作为modeladmin方法的操作>;`
在django中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java找不到当前线程的会话   同步Java同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回