Skip to main content

Django 内联管理员的操作

项目描述

易于使用的 Django 管理内联操作

https://img.shields.io/github/workflow/status/kvirt/django-inlines-actions/GH https://img.shields.io/codecov/c/github/kvirt/django-inlines-actions https://img.shields.io/pypi/v/django-inlines-actions

安装

  1. 安装 django_inlines_actions

    pip install django_inlines_actions
  2. inlines_actions添加到您的INSTALLED_APPS中。

  3. 将InlineActionsModelAdminMixin添加到您的ModelAdmin中。

  4. 将InlineActionsMixin添加到您的TabularInline中。

  5. inline_actions属性添加到您的TabularInline作为您的操作的元组。

    inline_actions = ('your_action_name', 'another_action_name',)
  6. 每个动作都必须有以下签名:

    def your_action_name(self, request, obj, parent_obj):

用法

Action 基本上是指向另一个具有相应视图的 url 的链接。它不像其他一些解决方案那样依赖于表单,并且不会在Enter命中时执行。Action 应该返回None以返回当前的 changeform 或HttpResponse实例。如果您想禁用Actions列,请将inline_actions设置为None

inline_actions = ('change_title',)

def change_title(self, request, obj, parent_obj):
    obj.title  = obj.title + ' | ' + parent_obj.name
    obj.save()

特征

权限

权限是列表/元组类的实例,可以是自定义函数或 django 内置权限。

def your_action_name(self, request, obj, parent_obj):
    pass
your_action_name.permissions = ('permission_func_name', 'django_builtin_permission_name',)

权限函数必须具有以下签名:

def permission_func_name(self, request, obj, parent_obj):

必须返回False才能通过权限检查,否则权限将通过。

如果权限返回False,则不会为用户呈现操作,并且操作将在执行时引发PermissionDenied 。

简短的介绍

简短描述是自定义函数或简单字符串。

def your_action_name(self, request, obj, parent_obj):
    pass
your_action_name.short_description = 'My Uniq Description'
your_action_name.short_description = 'short_description_func_name'

short_description 函数必须具有以下签名:

def short_description_func_name(self, request, obj, parent_obj):

CSS类

Css 类是自定义函数或简单字符串。

def your_action_name(self, request, obj, parent_obj):
    pass
your_action_name.css_class = 'my-css-class-name'
your_action_name.css_class = 'css_class_func_name'

css_class 函数必须具有以下签名:

def css_class_func_name(self, request, obj, parent_obj):

例子

from django.contrib import admin
from inlines_actions import InlineActionsModelAdminMixin, InlineActionsMixin

from .models import Article1, Author1


class ArticleInline(
    InlineActionsMixin,
    admin.TabularInline,
):
    model = Article1
    inline_actions = ('make_published',)

    def make_published(self, request, obj, parent_obj):
        obj.is_published = not obj.is_published
        obj.save()

    def make_published_permission(self, request, obj, parent_obj):
        if not request.user.is_superuser:
            return False

    def make_published_short_description(self, request, obj, parent_obj):
        return 'Published Make'

    def make_published_css_class(self, request, obj, parent_obj):
        return 'some_class'

    make_published.permissions = ('make_published_permission', 'example_app:can_change_article')
    make_published.short_description = make_published_short_description
    make_published.css_class = make_published_css_class


class AuthorAdmin(
    InlineActionsModelAdminMixin,
    admin.ModelAdmin,
):
    inlines = (ArticleInline,)


admin.site.register(Author1, AuthorAdmin)

测试

pip install requirements.txt
tox

项目详情


下载文件

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

源分布

django_inlines_actions-0.4.tar.gz (9.1 kB 查看哈希)

已上传 source

内置分布

django_inlines_actions-0.4-py3-none-any.whl (9.8 kB 查看哈希)

已上传 py3