交互式用户友好的数据库浏览器。
项目描述
交互式,用户友好的数据库浏览器。
演示
在此处有一个可用的实时演示站点 https://data-browser-demo.herokuapp.com/data-browser/。
因为它托管在Heroku免费层,第一次页面加载可能需要一些时间。
Django项目是一个小型电子商务网站,销售微服务。
功能
零配置,如果它在管理中,它也在浏览器中。
选择字段(包括计算字段),聚合,过滤,排序和透视。
自动跟踪一对一字段和外键。
尊重每个用户的行政权限。
通过分享URL简单共享视图。
保存视图并可选择使它们可供Google Sheets等服务使用。
将视图作为CSV或JSON下载。
支持的版本
数据浏览器目前在以下环境中进行了测试
Django 3.2 - 5.0
Python 3.8 - 3.12
MySQL,PostgreSQL,SQLite
我们强烈推荐并仅正式支持每个Python和Django系列的最新补丁版本。
安装
运行 pip install django-data-browser。
将 "data_browser" 添加到 installed_apps。
将 path("data-browser/", include("data_browser.urls")) 添加到您的urls中。
运行 python manage.py migrate。
如果您在管理界面中有查询集注释,或者想要公开计算值,请参阅计算和注释字段部分。
设置
名称 |
默认值 |
文档部分 |
功能 |
---|---|---|---|
DATA_BROWSER_ADMIN_FIELD_NAME |
admin |
设置“在Django管理界面中打开”字段的名称。 |
|
DATA_BROWSER_ALLOW_PUBLIC |
False |
在有限情况下允许选择已保存的视图在不登录管理员的情况下访问。 |
|
DATA_BROWSER_AUTH_USER_COMPAT |
True |
在调用 get_fieldsets 对一个 UserAdmin 进行时,始终传递关联模型的实例。 |
|
DATA_BROWSER_DEFAULT_ROW_LIMIT |
1000 |
UI中行限制选择器的默认值。 |
|
DATA_BROWSER_DEV |
False |
CONTRIBUTING.rst |
启用代理前端到JS开发服务器。 |
DATA_BROWSER_FE_DSN |
None |
前端Sentry应报告的DSN,默认禁用。 |
|
DATA_BROWSER_USING_DB |
"default" |
指定默认情况下所有数据库查询要使用的数据库别名。 |
|
DATA_BROWSER_ADMIN_OPTIONS |
{} |
设置管理特定配置选项。 |
|
DATA_BROWSER_APPS_EXPANDED |
True |
主页模型列表的应用程序部分默认展开。 |
|
DATA_BROWSER_ADMIN_SITE |
None |
指定要使用的 admin.AdminSite(默认为 admin.site)。 |
权限
data_browser.make_view_public |
可以使保存的视图公开可用。 |
|
data_browser.share_view |
可以与其他用户共享保存的视图。 |
安全性
数据浏览器中的大多数Django视图只能由Django“工作人员”访问。这些视图支持对数据库进行通用查询,并检查已登录用户的行政权限。
唯一的例外是“公共保存视图”,这些是已保存并标记为公共的视图。任何人都可以在不登录的情况下访问它们,但它们只能用于访问已保存并公开的查询,并且它们具有长随机的URL。
您可以使用管理权限 data_browser | view | 可公开保存的视图 来限制谁可以公开视图。为了公开,视图必须标记为公共,并且由具有权限的人拥有。
此外,整个公开视图系统由Django设置值 DATA_BROWSER_ALLOW_PUBLIC 控制。
Sentry
前端代码内置了Sentry支持,默认情况下是 禁用的。要启用它,请设置Django设置值 DATA_BROWSER_FE_DSN,例如,要将它设置为Data Browser项目的Sentry,请使用
DATA_BROWSER_FE_DSN = "https://af64f22b81994a0e93b82a32add8cb2b@o390136.ingest.sentry.io/5231151"
链接到数据浏览器
数据浏览器的首页URL由 reverse("data_browser:home") 给出。
此外,如果您正在使用 data_browser.helpers.AdminMixin,那么在管理列表视图中,相同模型的Data Browser页面URL可作为模板上下文变量 ddb_url 使用。
利用此功能的一种便捷方法是创建文件 templates/admin/change_list_object_tools.html 并填充它
{% extends "admin/change_list_object_tools.html" %}
{% block object-tools-items %}
{{ block.super }}
{% if ddb_url %}
<li><a href="{{ ddb_url }}" class="viewlink">Data Browser</a></li>
{% endif %}
{% endblock %}
这将在每个继承自mixin的管理列表视图中放置一个“数据浏览器”按钮。注意:要在顶级执行此操作,您放置模板的应用程序必须在 INSTALLED_APPS 中的 contrib.admin 之前。
指定模型和字段
默认情况下,数据浏览器可以访问当前用户在管理网站任何地方都可以看到的所有模型和字段。但是,如果需要,可以通过在 ModelAdmin 和 Inline 上使用以下类级别属性和函数进行调整。
名称 |
格式 |
目的 |
---|---|---|
ddb_ignore
get_ddb_ignore(request)
|
bool |
忽略此管理员/内联,仍将显示同一模型上其他内联/管理员上的字段。 |
ddb_hide_fields
get_ddb_hide_fields(request)
|
[字段名] |
显式隐藏指定的字段。 |
ddb_extra_fields
get_ddb_extra_fields(request)
|
[字段名] |
添加在字段、字段集或列表显示中未提及的额外字段。 |
ddb_json_fields
get_ddb_json_fields(request)
|
{字段名: {json字段名: 类型}} |
在数据浏览器中暴露字段,以便访问。类型可以是“字符串”、“数字”或“布尔值”。 |
ddb_default_filters
get_ddb_default_filters()
|
[(路径,查找,值)] |
在打开此模型时添加的默认过滤器。
例如,要添加client__name__equals=Test,使用[("client__name", "equals", "Test")]。
|
ddb_action_url
get_ddb_action_url(request)
|
str |
将管理员操作提交到的URL,通常是更改列表视图。见管理员操作 |
这些也可以通过设置设置条目DATA_BROWSER_ADMIN_OPTIONS来设置,如果您希望更改第三方管理员上的选项,这将很有用。此格式为{'my_package.MyAdmin': {'option': value}},例如,要完全删除Django Q的Task和Fail管理员,您将使用
DATA_BROWSER_ADMIN_OPTIONS = {
'django_q.admin.TaskAdmin': {'ignore': True},
'django_q.admin.FailAdmin': {'ignore': True},
}
最后,根据以下部分,可以通过设置ddb_hide属性来隐藏计算字段和操作,而注释字段始终可见,除非显式隐藏。
计算字段和注解字段
计算
计算字段是在ModelAdmin上的字段,其值来自ModelAdmin上的函数或Model自身上的函数或属性,如Django admin列表显示文档底部所述。
作为任意Python代码,计算字段对数据浏览器来说是透明的。它可以获取它们的值,但不能对它们进行排序或筛选等操作。对于旋转,它们被视为与同一模型上的pk等效。
此外,可以通过将属性ddb_hide设置为True来从数据浏览器中隐藏计算字段。data_browser.helpers.attributes装饰器可以使这更加整洁。
@attributes(ddb_hide=True)
def my_calculated_field(self, obj):
return ...
注释
数据浏览器对注释字段有额外的支持。通常您会将这些作为计算字段公开。模块data_browser.helpers包含帮助器,可以使公开注释字段更加简单、高效,并使它们对数据浏览器可用,以便进行任意操作。
以这种方式公开注释字段需要两个更改。
将data_browser.helpers.AdminMixin混合到您的ModelAdmin中。
添加一个带有data_browser.helpers.annotation装饰器的函数,该函数接收并更新一个查询集。
from data_browser.helpers import AdminMixin, annotation
@admin.register(MyModel)
class MyAdmin(AdminMixin, ModelAdmin):
fields = ["my_field"]
@annotation
def my_field(self, request, qs):
return qs.annotate(my_field=Cast(..., output_field=IntegerField()))
警告:在数据浏览器中进一步聚合时,注释聚合将产生误导性结果。
重要的是装饰注释函数的名称和注释查询集字段的名称相匹配。
有时有必要将顶级注释的output_field设置为输出类型,以便数据浏览器可以知道它将产生哪种类型的数据。当需要这样做时,您将收到一个错误。
帮助器将自动处理admin_order_field和boolean属性以及readonly_fields,减少在管理员中使用注释时所需的开销。
此外,只有当在 list_display 中提及时,注释才会应用于列表视图,这允许您在详细视图中广泛使用注释,而不会损害列表视图的性能。
最后,即使没有在字段、字段集或列表显示中提及,注释仍然会在数据浏览器中可见,除非显式地在 ddb_hide_fields 中提及。
性能
get_queryset()
数据浏览器分两个阶段进行获取。
首先,它执行单个数据库查询以获取大多数数据。为此,它将在当前模型的 ModelAdmin 上调用 get_queryset()。它使用 .values() 从数据库中获取所需的数据,并将所有引用的模型内联,以确保不会进行多次查询。
在这个阶段,相关模型上的注释字段将附带子查询注释,数据浏览器将调用相关 ModelAdmin 上的 get_queryset() 以生成这些子查询注释。
其次,对于任何计算字段,它将获取为这些计算字段所需的完整对象。为此,它将在相关的 ModelAdmin 上调用 get_queryset()。这些调用是聚合的,因此它只为每个模型执行一次。
作为一个简单的例子,如果您对 Book 模型进行了针对以下字段的查询
book.name
book.author.name
book.author.age
book.author.number_of_books
book.publisher.name
其中 author.age 实际上是 Author 模型上的属性,而 author.number_of_books 是 Author ModelAdmin 上的 @annotation,那么它将执行以下两个查询
BookAdmin.get_queryset().annotate(
author__number_of_books=Subquery(
AuthorAdmin.get_queryset()
.filter(pk=OuterRef("author__id"))
.values("number_of_books")[:1]
)
).values(
"name",
"author__name",
"author__id",
"author__number_of_books",
"publisher__name",
)
AuthorAdmin.get_queryset().in_bulk(pks=...)
其中第二个查询中传递给 in_bulk 的 pks 来自第一个查询中的 author__id。
您可以通过将 URL 中的 .html 改为 .qs 来查看主查询集的近似值。类似地,还有 .sql、.explain 和 .analyze。
当数据浏览器调用管理 get_queryset() 函数时,它将在 request.data_browser 中放置一些上下文。这允许您测试数据浏览器是否按以下方式调用
if hasattr(request, "data_browser"):
# Data Browser specific customization
如果您想将数据浏览器路由到特定模型的数据库副本(请注意,如果您想对所有模型都这样做,请参阅下面的 QuerySet.using()),这将特别有用。
上下文还包括一个 fields 成员,列出数据浏览器计划访问的所有字段。您可以使用此功能进行条件预取或注释,以支持这些字段,如下所示
if (
not hasattr(request, "data_browser")
or "my_field" in request.data_browser["fields"]
):
# do prefetching and annotating associated with my_field
在 Calculated and Annotated fields 部分中描述的 AdminMixin 正在为 @annotation 字段内部执行此操作。
QuerySet.using()
可以使用设置 DATA_BROWSER_USING_DB 将数据浏览器发起的数据库查询定向到副本。此值下传递给 QuerySet.using()。
ModelAdmin.get_fieldsets()
数据浏览器还会调用 get_fieldsets 来确定当前用户可以访问哪些字段。
与 get_queryset 类似,数据浏览器在调用 get_fieldsets 时会设置 request.data_browser,您可以测试这一点来检测它并进行数据浏览器特定的自定义。
Django 用户管理后台有代码在添加新用户时更改字段集。为了弥补这一点,当在 django.contrib.auth.admin.UserAdmin 的子类上调用 get_fieldsets 时,数据浏览器将传递一个新构造的相关模型实例。可以通过将 settings.DATA_BROWSER_AUTH_USER_COMPAT 设置为 False 来禁用此行为。
管理操作
通过右键单击 ID(或其他合适的 pk 字段)列标题,可以暴露 Django 的管理操作。
由于这些操作在 Django 中的实现方式,有一些额外的技术考虑。
这些操作被发送到管理更改列表 URL。一旦发生此 post 操作,数据浏览器就不再参与其中,因此无法像通常那样设置 request.data_browser。相反,它将设置 post 参数 data_browser。
当数据浏览器触发操作时,将应用默认的管理过滤。如果您有默认隐藏行的高级管理过滤,则从数据浏览器触发的操作将无法访问这些行。为了解决这个问题,您可以指定 get_ddb_action_url 以覆盖操作发送到的 URL。默认情况下,它返回更改列表 URL,因此您可以附加任何必要的参数来设置过滤器以不进行过滤。
样式定制
您可以根据 Django 的模板覆盖文档 覆盖 data_browser/index.html 模板,并替换 extrahead 块。(确保 "data_browser" 在 INSTALLED_APPS 中您的应用程序之后。)
这将允许您注入自定义 CSS 和样式表。
然而请注意,由于常规 CSS 的注入方式,任何自定义 CSS 都将在常规 CSS 之前,因此您需要使用更具体的选择器或 !important。
自定义函数和聚合
您可以与数据浏览器注册额外的函数和聚合,包括自定义的。
类型
函数和聚合附加到数据浏览器核心类型,这些类型在 data_browser.types 中。
函数
此功能是暂定的,不遵循常规的向后兼容保证。
函数注册在 data_browser.orm_functions.TYPE_FUNCTIONS 中,该注册有类型 dict[BaseType, dict[str, data_browser.orm_functions.Func]]。可以在运行时安全地插入新条目。
例如,要将 MD5 函数添加到字符串字段,您可以执行以下操作
from django.db.models.functions import MD5
from data_browser.types import StringType
from data_browser.orm_functions import Func, TYPE_FUNCTIONS
TYPE_FUNCTIONS[StringType]["md5"] = Func(MD5, StringType)
聚合
此功能是暂定的,不遵循常规的向后兼容保证。
聚合注册在 data_browser.orm_aggregates.TYPE_AGGREGATES 中,该注册有类型 dict[BaseType, dict[str, data_browser.orm_aggregates.Agg]]。可以在运行时安全地插入新条目。
例如,要将不应用 distinct 的计数添加到数字字段,您可以执行以下操作
from django.db.models import Count
from data_browser.types import NumberType
from data_browser.orm_aggregates import Agg, TYPE_AGGREGATES
TYPE_AGGREGATES[NumberType]["full_count"] = Agg(
lambda x: Count(x, distinct=False), NumberType
)
自定义 SQL 示例
对于更大的示例,假设您想使用 Postgres 的 percentile_cont 功能来向持续时间字段添加 p95 聚合,可能用于某种应用程序性能监控用例。
首先我们需要向 Django 解释 percentile_cont。
from django.db.models import Aggregate
class Percentile(Aggregate):
arity = 1
function = "percentile_cont"
template = "%(function)s(%(percentile)s) WITHIN GROUP (ORDER BY %(expressions)s)"
name = "Percentile"
def __init__(self, percentile, expressions, **extra):
super().__init__(expressions, percentile=percentile, **extra)
然后我们需要告诉数据浏览器我们希望在持续时间字段上使用 p95。
from data_browser.orm_aggregates import TYPE_AGGREGATES, Agg
from data_browser.types import DurationType
TYPE_AGGREGATES[DurationType]["p95"] = Agg(
lambda x: Percentile(0.95, x), DurationType
)
管理站点
您可以使用自定义的 admin.AdminSite(参见https://docs.django.ac.cn/en/4.2/ref/contrib/admin/)。
为此,在您的 settings.py 文件中添加以下内容:
from django.contrib import admin
class BrowserAdminSite(admin.AdminSite):
pass
DATA_BROWSER_ADMIN_SITE = BrowserAdminSite(name='data_browser')
然后,在任意的 admin.py 文件中,像往常一样注册模型,但使用 DATA_BROWSER_ADMIN_SITE。
例如在 myapp/admin.py
from django.contrib import admin
from django.conf import settings
from myapp.models import MyAdminModel, MyBrowsableModel
# register in admin only
admin.register(MyAdminModel)
# register in data browser only
settings.DATA_BROWSER_ADMIN_SITE.register(MyBrowsableModel)
版本号
数据浏览器使用标准的 Major.Minor.Patch 版本编号方案。
补丁版本可能包括错误修复和次要功能。
次要版本用于重大新功能。
主版本用于主要功能,现有功能的重要更改以及破坏性更改。
补丁和次要版本不应包含破坏性更改,并且始终应向后兼容。破坏性更改是指对以下内容之一进行向后不兼容更改:
查询URL格式。
json、csv等数据格式,这不包括数据浏览器内部API,仅包括数据导出格式。
传递给 get_fieldsets 和 get_queryset 的 request.data_browser 的格式。
现有已保存视图。
公共已保存视图的URL。
对于alpha和beta版本,任何内容都可能改变或中断。
发布历史
版本 |
日期 |
摘要 |
---|---|---|
4.2.10 |
2024-04-08 |
修复字段筛选器中的Z战斗问题。
重构JS以提升速度。
修复字段筛选器中的正则表达式转义问题。
|
4.2.9 |
2024-04-02 |
使字段筛选器匹配更宽容。
为注释字段添加独特的(青色)颜色。
|
4.2.8 |
2024-02-11 |
改进字段筛选器匹配。
将粘性标题添加到字段列表中。
|
4.2.7 |
2024-02-04 |
将文本筛选器添加到字段列表顶部。 |
4.2.6 |
2024-02-04 |
支持自定义管理员站点。由 #aboutofpluto 贡献。
修复日期表达式在日期时间字段上的筛选器不锚定到午夜的问题。
使用应用的详细名称和模型。
添加对Python 3.12和Django 5.0的支持,取消对Python 3.7的支持。
|
4.2.5 |
2023-07-20 |
修复解析类似于 mon-1 的日期/日期时间字符串的问题。
通过 .analyze URL添加对数据库查询分析的支持,类似于现有的 .explain。
|
4.2.4 |
2023-07-02 |
临时支持添加自定义函数和聚合。
修复布尔型和持续时间上的所有聚合。(仅限Postgres)
|
4.2.3 |
2023-06-15 |
修复ASGI兼容性问题。 |
4.2.2 |
2023-06-08 |
修复有关已保存视图有效性的各种问题。 |
4.2.1 |
2023-05-21 |
BREAKING:在JSON格式中,将 parsed 和 filterErrors 移动到筛选器上。
显示无效字段(以前它们被忽略)。
修复删除带有错误筛选器的bug。
|
4.1.1 |
2023-05-07 |
修复使用多个身份验证后端时共享视图的bug。 |
4.1.0 |
2023-05-01 |
支持用户之间共享已保存视图。
允许在已保存视图部分中混合文件夹和视图。
修复无效筛选器导致查询页面无法渲染的bug。
|
4.0.17 |
2023-04-25 |
修复仅在第一列上工作的管理员操作bug(在4.0.14版本中引入)。 |
4.0.16 |
2023-04-16 |
按应用将主页模型列表分组到可折叠的章节中。
允许将已保存视图分组到可折叠文件夹中。
|
4.0.15 |
2023-04-11 |
延迟后清除确认提示。
记住当前已保存视图并允许更新它。
|
4.0.14 |
2023-04-05 |
修复当结果数量超过限制时管理员操作不尊重排序的bug。
添加对Django 4.2和Python 3.11的支持,取消对Django 2.2、3.0和3.1的支持。
使“多对多”支持普遍可用。
|
4.0.13 |
2023-03-06 |
添加对Django 4.1的支持。
与由cookiecutter-django启用的CSRF_COOKIE_HTTPONLY一起工作。
|
4.0.12 |
2022-05-03 |
允许通过 DATA_BROWSER_ADMIN_OPTIONS 设置每个管理员的选项。 |
4.0.11 |
2022-04-12 |
修复当 DATA_BROWSER_ADMIN_FIELD_NAME 包含空格时的错误。 |
4.0.10 |
2022-04-10 |
通过始终对所有字段进行排序来使结果稳定。
修复在数据透视且标题超过结果限制时结果较少或没有结果的问题。
添加对Postgres的数组长度函数的支持。
允许通过 DATA_BROWSER_ADMIN_FIELD_NAME 覆盖“在Django管理中打开”字段名。
添加 AppConfig 并声明 default_auto_field。
通过新的 DATA_BROWSER_USING_DB 设置暴露对 QuerySet.using() 的访问。
|
4.0.9 |
2022-01-04 |
修复在文件和URL上不工作的包含过滤器。
允许将字面日期时间值与相对子句组合。
将Postgres的 ArrayAgg 作为 all 聚合暴露。
为“多对多”图标添加鼠标悬停文本。
修复当 related_name 与 related_query_name 不同时的错误。
CSS微调。
将计算字段的颜色从红色改为灰色。
添加对Django 4.0的支持,并停止支持Python 3.6。
|
4.0.8 |
2021-12-12 |
修复使用 .qs 时 F 表达式的格式化问题。
使字段列表和过滤器列表可折叠。
CSS微调。
将公共视图信息添加到 request.data_browser。
修复在长度过滤选择字段数组时崩溃的问题。
|
4.0.7 |
2021-08-16 |
添加对 django-hashid-field 的支持。
修复聚合字段名称以 _ 开头时的崩溃错误。
|
4.0.6 |
2021-08-10 |
修复拼写错误。 |
4.0.5 |
2021-08-09 |
不要覆盖HTML值(例如“管理员”列)的右键单击上下文菜单。
修复排除 IsNull/NotNull 值时的“错误的查找”。
修复按回车键清除所有过滤器。
修复使用 .qs 时的异常。
修复“保存视图”管理页面上的视图链接不保留 limit 的问题。
改进上下文菜单的位置。
|
4.0.4 |
2021-07-04 |
添加 .qs 格式支持以查看主要的Django查询集。
支持日期和日期时间过滤器中的 weeks。
修复对注释上的过滤函数(例如 __my_annotation__is_null=IsNull)进行过滤时的错误。
将管理操作添加到id列旁边的管理列中。
添加到右键单击菜单中的排除选项。
|
4.0.3 |
2021-06-18 |
在Django 3.2上进行测试。 |
4.0.2 |
2021-04-12 |
URL、图像和文件字段过滤器像字符串一样,并在CSV和JSON中作为字符串渲染。 |
4.0.1 |
2021-04-11 |
URL字段显示为链接。
更改数据透视图标。
自动包含一对一字段的其他一边。
在文本选择内部右键单击时禁用自定义上下文菜单。
修复与 helpers.AdminMixin 和子类 MRO 排序相关的罕见问题。
|
4.0.0 |
2021-03-13 |
在JSON输出中,聚合字段现在始终在主体中。
CSV格式已更改,因此聚合字段始终位于其他字段右侧。
在UI中,聚合字段现在始终位于其他字段右侧。
字段按类型着色,绿色:正常,蓝色:聚合,红色:不能排序或过滤。
右键单击钻入动作现在仅在行/列具有多个值时添加过滤器。
|
3.3.0 |
2021-02-19 |
停止支持Django 2.0和2.1。
重新设计管理操作集成。
|
3.2.5 |
2021-02-07 |
日期过滤器值格式化为 2020-1-2 的现在被认为是ISO排序的,不再模糊。
重新设计 @annotation 和 AdminMixin,以便 @annotation 可以用于混入。
|
3.2.4 |
2021-02-02 |
修复数组字段上的 equals 和 not equals 不起作用的问题。
改进日期和日期时间过滤器错误。
改进和对比显示空值和空字符串。
针对主键不是 id 的各种模型进行了修复。
空但非空的文件字段现在显示为空字符串而不是 null。
修复了 is null 与 year 函数不兼容的问题。
字段列表现在按显示名称排序(主键和行政链接除外)。
修复了在函数和聚合中使用 not equals 时排除 null 值的问题,例如 year、min 等。
现在正确处理了右键筛选和钻取时的 null 值。
防止保存的视图名称过长时引发异常。
|
3.2.3 |
2021-01-11 |
修复了使用与字段类型不同的筛选器时的错误,例如 is null。 |
3.2.2 |
2020-12-30 |
修复了一些模型中缺少 id 字段的问题。
根据 Django,Django 2.0 和 2.1 不支持 Py3.8 和 3.9。
|
3.2.1 |
2020-12-30 |
保护模型行政类选项值免受意外修改。 |
3.2.0 |
2020-12-30 |
支持通过右键单击 id 列表头来调用行政操作。
修复了各种筛选问题。
在未设置 id 字段的模型上不显示 id。
将“小于”、“大于”等显示为“<”、“>”等。
日期和日期时间筛选值的鼠标悬停提示帮助。
将具有不良字段和查找的筛选器报告为错误,而不是忽略。
在加载公共 URL 时,公共已保存视图上的不良筛选器现在会导致 400 错误。
修复了在聚合注释上筛选的问题。
|
3.1.4 |
2020-12-19 |
修复了无法筛选 UUID 的问题。
修复了右键钻取和筛选尝试筛选不可筛选字段的问题。
修复了在数值 0 下方出现无谓的 0 的问题。
在模板和文档中添加一个 extrahead 块以覆盖 CSS。
|
3.1.3 |
2020-12-13 |
在日期和时间筛选器中支持相对时间。
在筛选器旁边显示解析后的日期和日期时间。
在首页添加视图 SQL 链接。由 #xinye1 贡献。
|
3.1.2 |
2020-12-09 |
从 UUID 中删除长度函数。
没有行政的 FK 以仅FK字段的形式公开。
|
3.1.1 |
2020-12-01 |
如果没有保存的视图,则不运行 3.0.0 数据迁移。 |
3.1.0 |
2020-11-29 |
添加带有筛选和钻取选项的右键菜单。 |
3.0.4 |
2020-11-28 |
忽略非模型的事物。 |
3.0.3 |
2020-11-22 |
修复了筛选超出范围年份值时的异常。 |
3.0.2 |
2020-11-18 |
修复了 Django 3.1 中围绕 is null 值聚合的 bug。
修复了在 JsonFields 中缺少字段时 is null 返回 None 的问题。
|
3.0.1 |
2020-11-12 |
为 ddb_* 行政选项添加 get_* 函数。
为字符串字段添加长度函数。
通过 .explain URL 支持数据库查询说明。
防止在获取纯聚合的 SQL 视图时引发异常。
修复了处理 ISO 日期时,日期部分小于 13 的错误。
支持 Python 3.9。
|
3.0.0 |
2020-11-09 |
ddb_default_filters 的格式已更改。
从 JSON 响应的字段和筛选器中删除了路径和 prettyPath。
在筛选器中使用人类可读值来处理选项和 is null 字段。
选项字段有一个原始子字段,用于访问底层值。
从选项字段中删除了 starts with、regex 等,等效功能在原始中。
verbose_names 和 short_descriptions 用于在网页前端和 CSV 中显示。
JSON 和数组中的等于和不等于。
JSON 字段筛选支持列表和对象。
数组值现在统一使用 JSON 编码。
为筛选格式更改回滚保存的视图。
在没有实际行政的情况下,拾取内联中的计算字段。
修复了 ID 和内联上的注释对没有权限的用户可见的 bug。
支持对注解字段进行聚合和函数操作。
现在注解会尊重 ddb_hide。
数据浏览器中的管理员链接会尊重 ddb_ignore。
|
2.2.21 |
2020-11-02 |
在过滤器中拒绝模糊的日期和日期时间值。 |
2.2.20 |
2020-10-22 |
修复 Django≥3.0 中的 ArrayField 的错误。 |
2.2.19 |
2020-10-19 |
支持内联注解。 |
2.2.18 |
2020-10-18 |
支持分析 CSV 等输出。请参阅 CONTRIBUTING.rst。
针对大型结果集的性能改进。
|
2.2.17 |
2020-10-15 |
针对大型结果集的性能改进。
修复当选择字段有意外值时的错误。
|
2.2.16 |
2020-09-28 |
修复在没有转置时无法重新排序聚合的问题。
修复返回按钮有时不会记住列重新排序的问题。
修复在长时间重新加载过程中重新排序列导致错误的问题。
|
2.2.15 |
2020-09-27 |
处理 ModelAdmin.list_display 中的可调用对象。
添加 data_browser.helpers.attributes。
废弃 @ddb_hide,改为 @attributes(ddb_hide=True)。
将计算字段返回的安全字符串渲染为 HTML。
尊重计算字段上的 boolean 属性。
除了声明的布尔值外,计算字段现在始终格式化为字符串。
|
2.2.14 |
2020-09-20 |
保存视图样式调整。
只有在字段删除可能改变结果时才重新加载。
添加重新排序字段的 UI 控制器。
|
2.2.13 |
2020-09-13 |
添加 .sql 格式以显示原始 SQL 查询。
日期和日期时间字段的最小值和最大值。
添加 ddb_default_filters。
通过 .profile 和 .pstats 集成 cProfile 支持。
|
2.2.12 |
2020-09-09 |
支持 DurationField。
默认按新添加的日期(等)字段排序。
修复 psycopg2 未安装时 JSONField 的错误。
修复数字格式化和转置数据时的错误。
修复同一字段上多个非相邻过滤器时的错误。
修复 naive DateTimeFields 的错误。
|
2.2.11 |
2020-08-31 |
一些小改进和修复。 |
2.2.10 |
2020-08-31 |
一些小改进。 |
2.2.9 |
2020-08-25 |
一些小修复。 |
2.2.8 |
2020-08-23 |
一些小修复。 |
2.2.7 |
2020-08-22 |
一些小修复。 |
2.2.6 |
2020-08-16 |
基本的 JSONField 支持。 |
2.2.5 |
2020-08-01 |
修复错误。 |
2.2.4 |
2020-08-01 |
额外的字段支持。
一些小功能和修复错误。
|
2.2.3 |
2020-07-31 |
文件和图像字段支持。 |
2.2.2 |
2020-07-26 |
更好地支持选择字段。 |
2.2.1 |
2020-07-25 |
性能调整。 |
2.2.0 |
2020-07-21 |
对注解字段进行排序和过滤。 |
2.1.2 |
2020-07-11 |
一些小错误修复。 |
2.1.1 |
2020-07-06 |
错误修复。
JSON 中空转置单元格的表示已更改。
|
2.1.0 |
2020-07-06 |
将视图引入 JS 前端。
对结果实施行限制。
所有现有保存的视图将限制为 1000 行。
更好的加载和错误状态指示。
锁定列标题。
|
2.0.5 |
2020-06-20 |
错误修复。 |
2.0.4 |
2020-06-18 |
修复 Py3.6 支持。 |
2.0.3 |
2020-06-14 |
改善转置时聚合的过滤。 |
2.0.2 |
2020-06-14 |
改善字体和符号。 |
2.0.1 |
2020-06-14 |
改善转置时的排序。 |
2.0.0 |
2020-06-14 |
交叉表。
所有公开视图 URL 已更改。
JSON 数据格式已更改。
|
1.2.6 |
2020-06-08 |
错误修复。 |
1.2.5 |
2020-06-08 |
错误修复。 |
1.2.4 |
2020-06-03 |
计算字段与聚合更好地交互。 |
1.2.3 |
2020-06-02 |
JS 错误处理调整。 |
1.2.2 |
2020-06-01 |
一些小修复。 |
1.2.1 |
2020-05-31 |
改进日期处理。 |
1.2.0 |
2020-05-31 |
支持日期函数“年”、“月”等,以及基于“现在”的过滤。 |
1.1.6 |
2020-05-24 |
增强对 URL 字符串的清理。 |
1.1.5 |
2020-05-23 |
修复聚合时间字段时的错误。 |
1.1.4 |
2020-05-23 |
修复与 GenericInlineModelAdmin 的破坏性错误。 |
1.1.3 |
2020-05-23 |
外观修复。 |
1.1.2 |
2020-05-22 |
外观修复。 |
1.1.1 |
2020-05-20 |
外观修复。 |
1.1.0 |
2020-05-20 |
支持聚合。 |
1.0.2 |
2020-05-17 |
Py3.6 支持。 |
1.0.1 |
2020-05-17 |
一些小修复。 |
1.0.0 |
2020-05-17 |
初始版本。 |
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希值 for django_data_browser-4.2.10-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 749688ee885ac38a9bf45f5e7f91be710f3f9bdc07b292a98adf0b9005bc9a5c |
|
MD5 | 6dddfd7aa697ab03619da0762e245183 |
|
BLAKE2b-256 | ac2079baa4408b8071228431faa9f687e8b403a8a9d3ee4383708dcaecff93bc |