跳转到主要内容

简化Django管理器的调整和工具。

项目描述

Django Admin Steroids - 扩展Django管理的调整和工具

Pipeline Status

概述

Django的admin支持很多自定义。然而,当前的实现依赖于类值和方法的使用,需要大量的代码重复。此项目包含类、混合和几个模板,提高了Django的admin的可用性和可维护性,并实现了一些缺失的功能。

特性

ModelAdmin混合

  • ReadonlyModelAdmin - 从ModelAdmin中移除所有可编辑性。

  • CSVModelAdmin - 添加一个更改列表操作,将所选记录导出为CSV。

  • FormatterModelAdmin - 允许使用admin字段格式化程序。

  • BetterRawIdFieldsModelAdmin - 从 Django Snippet <http://djangosnippets.org/snippets/2217/> 转换而来,格式化所有原始ID字段,并提供到相应管理更改页面的便捷链接。

字段格式化程序

如果您想用美元符号和逗号格式化货币美元值,您必须在ModelAdmin类中实现一个myvariable_dollars()方法,该方法返回所需的字符串,然后将其列在ModelAdmin的readonly_fields列表中。

在许多非平凡的应用中,我发现我不得不编写大量的这些函数,其中大部分几乎是相同的。因此,我决定将此功能抽象成多个类,这些类可以被实例化并轻松地插入到ModelAdmin中。

预构建的格式化程序包括

  • 美元格式

  • 百分比格式

  • 居中格式

  • 空格格式

  • 布尔格式

  • 外键链接

  • 一对一链接

格式化器通过在ModelAdmin的字段名称周围包裹它们来使用。比如说,你有一个名为 income 的字段,你想在管理界面中以美元符号的形式显示它。通常,你会这样做:

class BudgetAdmin(admin.ModelAdmin):

    fields = (
        'id',
        'name',
        'income_str',
    )
    
    readonly_fields = (
        'income_str',
    )
    
    def income_str(self, request, obj=None):
        if obj is None:
            return
        return '$%.2f' % obj.income

格式化器简化了这一过程。在这个例子中,你可以使用DollarFormat类来实现同样的功能,但代码量更少。

from admin_steroids import FormatterModelAdmin
from admin_steroids.formatters import DollarFormat

class BudgetAdmin(FormatterModelAdmin):

    fields = (
        'id',
        'name',
        DollarFormat('income', decimals=2),
    )

Ajax列表过滤器

Django默认的管理列表过滤器不允许选择字段的多值,也不处理具有大量值的字段。字段将所有值都渲染到列表或选择下拉框中,这会减慢页面加载速度并浪费屏幕空间。

我实现了一个自定义的AjaxFieldFilter,允许你通过Ajax搜索栏搜索一个或多个值,这样管理员仍然可以快速渲染,同时用户仍然可以搜索字段使用的任何值。

在你的管理界面中,添加AjaxFieldFilter如下:

from django.contrib import admin
from admin_steroids.filters import AjaxFieldFilter
import models

class MyModelAdmin(admin.ModelAdmin):

    list_filters = (
        ('myfield', AjaxFieldFilter),
    )
    
admin.site.register(models.MyModel, MyModelAdmin)

然后,在你的settings.py中,将'admin_steroids'添加到你的INSTALLED_APPS中,并标记你的字段为可搜索

INSTALLED_APPS = [
    ...,
    'admin_steroids',
]

DAS_ALLOWED_AJAX_SEARCH_PATHS = [
    ('myapp', 'mymodel', 'myfield'),
]

DAS_AJAX_SEARCH_PATH_FIELDS = {
    # This assumed "myfield" a ForeignKey, pointing to a model that has
    # a "name" and "slug" field you want to search.
    # If "myfield" is a simple CharField, you don't need to specify
    # anything here.
    ('myapp', 'mymodel', 'myfield'): ('name', 'slug'),
}

最后,将admin_steroids添加到你的urls.py中,以公开Ajax搜索URL,默认情况下将渲染为/admin/<app>/<model>/field/<field>/search的形式

urlpatterns = patterns('',
    ...

    # Should go before the actual admin, so it won't be overridden.
    (r'^admin/', include('admin_steroids.urls')),
    
    (r'^admin/', include(admin.site.urls)),
    
    ...
)

你可以通过排除上面的URL包含并指定自己的模式来覆盖这些URL,该模式指向admin_steroids.views.ModelFieldSearchView。

请参阅admin_steroids.urls以获取示例。

安装

使用pip通过以下命令安装此包:

pip install django-admin-steroids

开发

测试需要安装Python开发头文件,你可以在Ubuntu上使用以下命令通过Dead Snakes PPA安装它:Dead Snakes PPA

sudo apt-get install python-dev python3-dev python3.4-minimal python3.4-dev python3.5-minimal python3.5-dev  python3.6-minimal python3.6-dev

运行所有测试

export TESTNAME=; tox

运行特定环境的测试(例如Python 3.7与Django 3.2)

export TESTNAME=; tox -e py37-django32

运行特定测试

export TESTNAME=.test_widgets; tox -e py37-django32

项目详情


发布历史 发布通知 | RSS订阅

下载文件

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

源代码分发

django-admin-steroids-1.0.37.tar.gz (238.3 kB 查看哈希值)

上传时间 源代码

支持