简化了django admin中函数属性的使用,并使mypy满意
项目描述
django-admin-display
简化了django admin中函数属性(例如short_description
)的使用,并使mypy满意 :)
要求
- Python 3.6.1或更高版本
- Django >= 1.11
用法
如果您想更改Django在管理界面中显示只读值的行为,可以向相应的方法添加一些特殊属性。支持以下值
short_description
自定义可调用对象的列标题。
empty_value_display
如果字段的值为None
、空字符串或无元素的迭代器,则显示此值。
admin_order_field
指示该值由某个数据库字段表示。
boolean
如果方法返回布尔值,则显示一个漂亮的“开”或“关”图标。
allow_tags
(自Django 1.9以来已弃用)
禁用自动转义。
以下示例展示了您通常如何将这些属性应用于 AdminModel
或 Model
方法。
class Company(models.Model):
...
def owner(self) -> bool:
return self.owner.last_name
owner.short_description = "Company owner"
owner.admin_order_field = 'owner__last_name'
本模块通过提供方便的装饰器来替换定义这些属性的方式。
from django_admin_display import admin_display
class Company(models.Model):
...
@admin_display(
short_description="Company owner",
admin_order_field='owner__last_name',
)
def owner(self) -> bool:
return self.owner.last_name
为什么?
这个模块存在主要有两个原因。
使用 @property
在管理界面中显示计算模型属性是很常见的情况
class Company(models.Model):
...
@property
def created_on(self) -> datetime.date:
return self.created_at.date()
为了添加特殊属性,您必须创建一个受保护的方法,附加属性并使用 property()
包装该方法
class Company(models.Model):
...
def _created_on(self) -> datetime.date:
return self.created_at.date()
_created_on.short_description = "Created on"
created_on = property(_created_on)
这相当麻烦,难以阅读,而且大多数人不知道这是可能的。为了克服这些缺点,您可以使用 @admin_display
装饰器达到相同的结果
from django_admin_display import admin_display
class Company(models.Model):
...
@property
@admin_display(
short_description = "Created on",
)
def created_on(self) -> datetime.date:
return self.created_at.date()
mypy
如果您使用 mypy,您可能遇到了类似以下错误
"Callable[[Any, Any], Any]" 没有属性 "short_description"
常见的解决方案是在行尾添加 # type: ignore
来忽略类型检查
class CompanyAdmin(admin.ModelAdmin):
...
def created_on(self, company: models.Company) -> datetime.date:
return company.created_at.date()
created_on.short_description = "Created on" # type: ignore
该问题已在 github 上被知晓并广泛讨论。
这个装饰器通过内部使用 # type: ignore
并提供对设置属性的良好定义的签名来解决此问题。这不是一个最优的解决方案,但在问题得到解决之前可以很好地工作。
开发
本项目使用 poetry 进行打包和管理所有依赖项,并使用 pre-commit 运行 flake8、isort、mypy 和 black。
克隆此仓库并运行
poetry install
poetry run pre-commit install
以创建包含所有依赖项的虚拟环境。之后,您可以使用以下命令运行测试套件
poetry run pytest
此仓库遵循 Conventional Commits 风格。
Cookiecutter 模板
本项目使用 cruft 和 cookiecutter-pyproject 模板创建。要更新此仓库到最新模板版本,请在仓库根目录中运行
cruft update
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
哈希值 for django_admin_display-1.3.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d7491cd817d4dbf36f020a69f99db7687e3d1470207dc3f2cf649e53ead307d0 |
|
MD5 | 2b237413855f98a8475c0551db1a0a96 |
|
BLAKE2b-256 | cd31c327e1d05a9899597a25c68779b33756c24483e9f8c102d96079a4411881 |