raw_id_fields小部件替换,用于处理对象字符串值的变化显示。
项目描述
django-dynamic-raw-id
一个用于Django管理后台的raw_id_fields小部件替换,可以处理对象字符串值的变化显示,并且可以通过模板进行覆盖。
查看此示例
兼容性矩阵
Py/Dj | 3.8 | 3.9 | 3.10 | 3.11 | 3.12 |
---|---|---|---|---|---|
3.2 (LTS) | ✓ | ✓ | ✓ | ✓ | ✓ |
4.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
4.1 | ✓ | ✓ | ✓ | ✓ | ✓ |
4.2 (LTS) | ✓ | ✓ | ✓ | ✓ | ✓ |
5.0 | — | — | ✓ | ✓ | ✓ |
原因
默认情况下,Django的管理后台将所有可能的关联实例加载到一个选择框界面(<select>
)中,这对于具有数千个实例或多个外键的模型来说可能会导致加载时间过长和后台页面无响应。
正常的修复方法是使用Django的ModelAdmin.raw_id_fields,但它默认只显示相关模型实例的原始ID,这不太有用。
此包通过提供相关实例的字符串表示或自定义文本以及与该实例的admin更改表单的链接,改善了用户体验,除了原始ID本身之外。
安装
使用`pip`安装此包
$ pip install django-dynamic-raw-id
将dynamic_raw_id
添加到您的INSTALLED_APPS
列表中
INSTALLED_APPS = (
# ... other apps
'dynamic_raw_id',
)
添加urlpattern
。确保它在通用admin.site.urls
urlpattern包含之前。
urlpatterns = [
# ...
path('admin/dynamic_raw_id/', include('dynamic_raw_id.urls')),
path("admin/", admin.site.urls),
]
dynamic_raw_id
包含一些静态文件,所以别忘了运行manage.py collectstatic
。
用法
要在您的应用程序中使用django-dynamic-raw-id,您需要做的是在您的ModelAdmin
类中实现DynamicRawIDMixin
并将所需的字段添加到`dynamic_raw_id_fields`列表中。
from dynamic_raw_id.admin import DynamicRawIDMixin
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
dynamic_raw_id_fields = ('user',)
您还可以在Admin过滤器中使用dynamic_raw_id小部件。
from dynamic_raw_id.admin import DynamicRawIDMixin
from dynamic_raw_id.filters import DynamicRawIDFilter
class UserProfileAdmin(DynamicRawIDMixin, admin.ModelAdmin):
list_filter = (
('dynamic_raw_id_fk', DynamicRawIDFilter),
)
自定义动态小部件的值
django-dynamic-raw-id最酷的功能是能够自定义与DynamicRawIDWidget
一起显示的值的输出。如果只想显示对象的__unicode__
值,有一个基本的实现。要更改显示的值,只需实现正确的模板。
django-dynamic-raw-id查找以下模板结构dynamic_raw_id/<app>/<model>.html
和dynamic_raw_id/<app>/multi_<model>.html
(用于多值查找)。
例如,如果我有包含一个User
dynamic_raw_id字段的博客文章,并且我想显示为FirstName LastName
,我将创建模板dynamic_raw_id/auth/user.html
,如下所示:
<span>{{ object.0.first_name }} {{ object.0.last_name }}</span>
自定义admin URL前缀
如果您将admin和dynamic_raw_id脚本放置在除/admin/dynamic_raw_id/
之外的另一个前缀上,则需要调整DYNAMIC_RAW_ID_MOUNT_URL
JavaScript变量。
示例
# In case the app is setup at /foobar/dynamic_raw_id/
path('foobar/dynamic_raw_id/', include('dynamic_raw_id.urls')),
<script>window.DYNAMIC_RAW_ID_MOUNT_URL = "{% url 'admin:index' %}";</script>
理想的位置是admin admin/base_site.html
模板。完整示例
{% extends "admin/base_site.html" %}
{% block extrahead %}
{{ block.super }}
<script>
window.DYNAMIC_RAW_ID_MOUNT_URL = "{% url 'admin:index' %}";
</script>
{% endblock %}
测试和本地开发
测试套件使用Selenium进行前端测试,我们需要安装Firefox和geckodriver。您可以使用Homebrew在OS X上安装geckodriver。
$ brew install geckodriver
使用以下命令在本地环境中运行测试套件:
# If you don't have Poetry yet, install it globally.
$ pip install poetry
# Install Dependencies once and run pytest
$ poetry install
$ poetry run pytest
或者使用tox测试针对不同的Django和Python版本
# If you don't have Tox yet, install it globally.
$ pip install tox
# Run tox against multiple Python versions.
$ tox
您可以通过调用具有测试应用程序设置的django-admin
工具来打开Poetry shell以调用测试套件或其他“manage.py”命令。
这还允许您在testserver中运行内部测试应用程序,以预览django-dynamic-raw-id正在执行的操作
$ poetry shell
$ django-admin migrate
$ django-admin createsuperuser
$ django-admin runserver
变更日志
v4.2 (2024-06-18)
- 修复了保存后显示多个逗号的多个小部件。 #103
v4.1 (2024-05-20)
- 整体代码清理。
- 重构测试。现在有完整的测试覆盖率。
v4.0 (2024-04-21)
- Django 4.2兼容性和测试。
- Django 5.0兼容性和测试。
- 需要Python 3.8或更高版本。
- 将包管理切换到Poetry。
v3.0 (2022-03-20)
- Django 4.0兼容性和测试。
- 需要Django 3.2或更高版本。
- 需要Python 3.7或更高版本。
- 注意:您可能需要更改顺序并将动态-raw-id包含在通用admin包含之前。有关详细信息,请参阅Readme。
v2.8 (2020-12-02)
- Django 3.1兼容性和测试。
v2.7 (2020-05-02)
- Django 3.0兼容性和测试。
v2.6 (2019-06-21)
- 向后不兼容:删除了对Django <1.11的支持。
- 向后不兼容:删除了对Python 3.4的支持。
- Django 2.2兼容性和测试。
- 通用代码清理。
- Pipenv支持本地开发。
- 图标和对齐的某些视觉修复。
v2.5 (2018-12-09)
- Django 2.1兼容性和测试。
v2.4 (2018-04-09)
- 修复了Admin视图中缺失的图标。
- 修复了使用自定义/admin/ URL时的JS处理缺失问题。
v2.3 (2018-01-18)
- 向后不兼容:将项目重命名为
django-dynamic-raw-id
,以反映其实际功能。 - 修复了Django 1.10及以下版本中的玻璃查找图标。
- 媒体资源加载的特定顺序。
v1.2 (2018-01-17)
- 多个修复和增强。
- 基于Selenium的完整测试套件。
- Django 2.0和Python 3兼容性。
- pipenv支持。
项目详细信息
下载文件
下载您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。