跳转到主要内容

Django模型混合工具

项目描述

Jazzband https://github.com/jazzband/django-model-utils/workflows/Test/badge.svg https://codecov.io/gh/jazzband/django-model-utils/branch/master/graph/badge.svg https://img.shields.io/pypi/v/django-model-utils.svg Supported Python versions Supported Django versions

Django模型混合工具。

django-model-utils 支持 Django 3.2+。

此应用程序可在 PyPI 上找到。

获取帮助

django-model-utils 的文档可在 https://django-model-utils.readthedocs.io/ 查找

贡献

请向 GitHub 仓库问题跟踪器 提交错误和发送拉取请求。有关详细信息,请参阅 CONTRIBUTING.rst

变更日志

5.0.0 (2024-09-01)

  • 正式支持 Django 5.1

  • 移除MonitorField弃用警告。当可空且没有默认值时,将使用None而不是django.utils.timezone.now(GH-#599)

  • 为MonitorField添加弃用警告。当可空且没有默认值时,默认值将是None而不是django.utils.timezone.now

  • 添加巴西葡萄牙语翻译(GH-#578)

  • 不要使用post_init信号来初始化追踪器

  • 使 StatusField、MonitorField 和 SplitField 中的 contribute_to_class() 将额外的参数传递给 Django

  • SplitField 不再接受 no_excerpt_field 作为关键字参数

  • 使 SoftDeletableModel.delete() 中的 soft 参数为关键字参数

  • JoinManagerJoinManagerMixin 已弃用;请使用 JoinQueryset.as_manager() 代替

  • SoftDeletableQuerySetMixin.delete 修改为复制 Django 的 API。

4.5.1 (2024-05-02)

  • 通过 @mthuurne 移除 JoinQueryset.get_quoted_query()(GH-#618)

4.5.0 (2024-04-01)

  • 通过 @meanmail 在 - 中不要使用 post_init 信号来初始化追踪器(GH-#556)

  • 通过 @tadamcz 在 - 中澄清 SoftDeletableModel 管理器的文档(GH-#589)

  • [pre-commit.ci] 通过 @pre-commit-ci 在 - 中执行 pre-commit autoupdate(GH-#575)

  • 语言支持 - 通过 @gmcrocetti 在 - 中添加巴西葡萄牙语翻译(GH-#578)

  • 通过 @joecox 在 - 中移除已弃用的 init_deferred_fields 方法(GH-#580)

  • 通过 @mthuurne 在 - 中更新导入 ConnectionDoesNotExist 的位置(GH-#566)

  • 通过 @mthuurne 在 - 中从 InheritanceQuerySetMixin._clone() 中移除参数(GH-#567)

  • 通过 @jayvdb 在 - 中允许使用 sqlite 运行测试(GH-#516)

  • MonitorField - 通过 @gmcrocetti 在 - 中将默认值更改为 None,当字段是可空的(GH-#577)

  • 通过 @mthuurne 在 - 中显式重新导出 __init__ 模块中的名称(GH-#591)

  • 通过 @adamchainz 在 - 中从 freezegun 切换到 time-machine(GH-#510)

  • USE_TZ = True 通过 @foarsitter 在 - 中(GH-#593)

  • 通过 @mthuurne 在 - 中从测试中移除冗余的 JoinManager 定义(GH-#594)

  • 通过 @mthuurne 在 - 中传递原因到 @skip 装饰器(GH-#595)

  • 通过 @mthuurne 在 - 中解决测试模型中的命名冲突(GH-#596)

  • 通过 @mthuurne 在 - 中移除过时的 tests.signals 模块(GH-#597)

  • 通过 @mthuurne 在 - 中移除过时的测试模型(GH-#598)

  • 通过 @foarsitter 在 - 中提供本地开发的 PostgreSQL docker 容器(GH-#563)

  • [pre-commit.ci] 通过 @pre-commit-ci 在 - 中执行 pre-commit autoupdate(GH-#602)

  • 通过 @foarsitter 在 - 中添加 issue-manager(GH-#600)

  • 通过 @foarsitter 在 - 中添加翻译文件(GH-#608)

4.4.0 (2024-02-10)

  • 添加对 Python 3.11 的支持(GH-#545)

  • 添加对 Python 3.12 的支持(GH-#545)

  • 停止对 Python 3.7 的支持(GH-#545)

  • 添加对 Django 4.2 的支持

  • 添加对 Django 5.0 的支持

  • 移除 SaveSignalHandlingModel。此模型使用 Django 内部方法 Model.save_base() 的修改版本,并且自添加以来没有更新上游错误修复更改。

  • 添加瑞典语翻译

  • 使用合适的列名而不是 attname(GH-#573)

  • 修复调用 prefetch_related 时跟踪 ForeignKey 字段的 ValueError

4.3.1 (2022-11-15)

  • 确认支持 Django 4.0

  • 添加西班牙语翻译

  • 添加法语翻译

  • select_subclasses() 中移除 Django 1.7 的工作区

  • 停止对 Django < 3.2 的支持

  • 停止对 Python 3.6 的支持

  • 确认支持 Django 4.1

4.3.0

  • 由于打包问题从未发布。

4.2.0 (2021-10-11)

  • 添加对 Django 3.2 的支持

  • 停止对 Django 3.0 的支持

  • 添加对 Python 3.10 的支持

  • 添加 URL 安全令牌字段。

  • 引入用于 FieldTracker 状态重置的上下文管理器(GH-#491)

  • 修复 FieldTracker 在 Django 3.1+ 中 FileField 子类上的性能回归(GH-#498)

4.1.1 (2020-12-01)

  • isort 应用到代码库(参考 GH-#402)

  • 修复当模型同时继承 TimeStampModel 和 StatusModel 时的 TypeError(修复 GH-465)

4.1.0 (2020-11-29)

破坏性更改

  • FieldTracker 现在在执行 refresh_from_db 后将字段标记为未更改,并尊重 fields 参数(GH-#404)

  • FieldTracker 现在尊重在重写的 save() 方法中更改的 update_fields(GH-#404)

  • FieldTracker 现在在 pre_save() 后重置状态,而不是在 save() 信号中,这可能会改变重写的 save() 方法的行为(GH-#404)

其他更改

  • 更新 InheritanceQuerySetMixin 以避免查询过多的表

  • TimeStampedModel 现在会自动将 'modified' 字段作为 update_fields 参数添加,即使在使用 save() 时忘记添加也是如此

  • 将 ugettext_lazy 替换为 gettext_lazy 以满足 Django 弃用警告

  • 为 SoftDeletableModel 添加 available_objects 管理器,并在对象管理器中添加弃用警告

  • StatusModel 现在在保存时会自动将 'status_changed' 字段添加到 update_fields 参数中,以确保不会忘记

  • 更新测试要求

  • 将测试移动到 GitHub Actions:[https://github.com/jazzband/django-model-utils/actions](https://github.com/jazzband/django-model-utils/actions)

  • 停止支持 Django 2.1

  • 添加对 Python 3.9 的支持

  • 添加对 Django 3.1 的支持

4.0.0 (2019-12-11)

  • 添加了 Choices.subset

  • 移除对先前支持的 Django 版本的修改。(修复 GH-390)

  • 停止支持 Python 2.7。(修复 GH-393)

  • 停止使用 six

  • 停止支持 Django 1.11

  • 添加对 Python 3.8 的支持

  • 添加对 Django 3.0 的支持

3.2.0 (2019.06.21)

  • 捕获 AttributeError 以处理延迟的抽象字段,修复 GH-331。

  • 更新文档以解释使用 timeframed 模型管理器的用法,修复 GH-118

  • 尊重 OneToOneField.parent_link=False

  • 修复 Django 1.10+ 上延迟属性的处理,修复 GH-278

  • 修复 FieldTracker.has_changed()FieldTracker.previous() 以返回延迟字段的正确响应

  • 添加简体中文翻译。

  • 更新 AutoLastModifiedField,以便在实例创建时始终将其设置为 created,以便更容易查询。修复 GH-254

  • 支持所有类型的 Choices 对象的 reversed,修复 GH-309

  • 修复 Model 实例非可拾取性 GH-330

  • 修复 FieldTracker 中的补丁 save

  • 升级测试要求(pytest、pytest-django、pytest-cov)并跳过 Python 3.5 和 Django(trunk)的 tox 测试

  • 添加 UUIDModel 和 UUIDField 支持。

3.1.2 (2018.05.09)

  • 更新 InheritanceIterable 以继承自 ModelIterable 而不是 BaseIterable,修复 GH-277。

  • 为 'SoftDeletableModel' 添加 all_objects 管理器,以便在查询中包含软删除对象,根据 GH-255 的问题

3.1.1 (2017.12.17)

  • 通过 GH-306 更新分类器和 README,修复 GH-305

3.1.0 (2017.12.11)

  • 通过 GH-298 支持 Django 2.0,修复 GH-297

  • 通过 GH-300 移除旧的 travis 脚本

  • 修复 codecov 并切换到 py.test #301

3.0.0 (2017.04.13)

  • 停止支持 Python 2.6。

  • 停止支持 Django 1.4、1.5、1.6、1.7。

  • 从分发中排除测试,修复 GH-258。

  • 添加对 Django 1.11 的支持 GH-269

  • 添加一个新的模型以禁用 pre_save/post_save 信号

2.6.1 (2017.01.11)

  • 修复多个 MonitorFielddefer()only() 时的无限递归问题,在 Django 1.10+ 上。感谢 Romain Garrigues。合并 GH-242,修复 GH-241。

  • 修复 InheritanceManagerSoftDeletableManager 以尊重 self._queryset_class 而不是硬编码查询集类。合并 GH-250,修复 GH-249。

  • 根据文档添加 SoftDeletableQuerySetSoftDeletableManager 混合。

  • 修复 SoftDeletableModel.delete() 以使用正确的数据库连接。合并 GH-239。

  • SoftDeletableModel.delete() 中添加布尔关键字参数 soft,当设置为 False 时将回退到默认行为。合并 GH-240。

  • 在< cite >StatusModel中强制使用默认管理器,以避免使用重新定义< cite >objects管理器的抽象模型时出现管理器顺序问题。合并GH-253,修复GH-251。

2.6 (2016.09.19)

  • 添加了抽象类< cite >SoftDeletableModel,其管理器< cite >SoftDeletableManager和查询集< cite >SoftDeletableQuerySet

  • 修复了Django 1.10中字段跟踪器和延迟FileField的问题。

2.5.2 (2016.08.09)

  • 将< cite >runtests.py包含在sdist中。

2.5.1 (2016.08.03)

  • 修复了在Django 1.9下< cite >InheritanceQuerySet引发< cite >AttributeError异常的问题。

  • Django 1.10的支持在预alpha版本和最终版本之间有所下降;1.10目前不受支持。

2.5 (2016.04.18)

  • 停止支持Python 3.2。

  • 添加对Django 1.10预alpha版本的支持。

  • 在子模型上定义跟踪器时,正确跟踪父模型的外键。修复了GH-214。

2.4 (2015.12.03)

  • 删除< cite >PassThroughManager。改用Django内置的< cite >QuerySet.as_manager()和/或< cite >Manager.from_queryset()实用工具。

  • 添加对Django 1.9的支持。

2.3.1 (2015-07-20)

  • 从< cite >setup.py中删除所有与翻译相关的自动化。修复了GH-178和GH-179。感谢Joe Weiss、Matt Molyneaux和其他人的报告。

2.3 (2015.07.17)

  • 在模型实例上跟踪延迟字段,而不是在FieldInstanceTracker实例上。修复了从同一查询集中的多个模型实例访问延迟字段的问题。感谢Bram Boogaard。合并GH-151。

  • 修复了SplitField与Django 1.7迁移的兼容性问题。感谢ad-m。合并GH-157;修复GH-156。

  • 添加德语翻译。

  • 与Django 1.8兼容。

2.2 (2014.07.31)

  • 撤销GH-130,恢复在覆盖的< span class="docutils literal">save方法或< span class="docutils literal">post_save处理程序中访问< span class="docutils literal">FieldTracker更改的能力。这重新打开了GH-83(无法序列化带有< span class="docutils literal">FieldTracker的模型)直到找到不破坏其他行为的解决方案。感谢Brian May的报告。修复GH-143。

2.1.1 (2014.07.28)

  • 将变更日志中的所有非ASCII字符进行ASCII折叠;再次。哦。为那些名字因这个变化而被破坏的人道歉。似乎在系统编码可能是ASCII的情况下,distutils使得在Python 3下在setup.py long_description中可靠地处理非ASCII内容变得不可能。感谢Brian May的报告。修复GH-141。

2.1.0 (2014.07.25)

  • 将Django的内置迁移支持添加到< span class="docutils literal">MonitorField和< span class="docutils literal">StatusField

  • < span class="docutils literal">PassThroughManager现在支持通过< span class="docutils literal">dir查看公开的方法,这使得IPython的tab补全变得有用。合并GH-104,修复GH-55。

  • 为使用< span class="docutils literal">FieldTracker的模型添加pickle支持。感谢Ondrej Slintak的报告。感谢Matthew Schinckel的修复。合并GH-130,修复GH-83。

2.0.3 (2014.03.19)

  • 修复了< span class="docutils literal">PassThroughManager中的< span class="docutils literal">get_query_set与< span class="docutils literal">get_queryset问题,适用于Django <1.6。修复了相关管理器未正确过滤关系的问题。感谢whop、Bojan Mihelac、Daniel Shapiro和Matthew Schinckel的报告;Matthew进行了修复。合并GH-121。

  • 修复了具有延迟模型属性的< span class="docutils literal">FieldTracker。感谢Michael van Tellingen。合并GH-115。

  • 修复了具有自引用FK的< span class="docutils literal">InheritanceManager;避免无限递归。感谢rsenkbeil。合并GH-114。

2.0.2 (2014.02.19)

  • 将变更日志中的所有非ASCII字符进行ASCII折叠。为那些名字因这个变化而被破坏的人道歉。似乎在系统编码可能是ASCII的情况下,distutils使得在Python 3下在setup.py long_description中可靠地处理非ASCII内容变得不可能。感谢Simone Dalla的报告。修复GH-113。

2.0.1 (2014.02.11)

  • 修复了对“Django”而不是“django”的依赖,这更好地与静态PyPI镜像配合。感谢Travis Swicegood。

  • 修复了在复制< span class="docutils literal">PassThroughManager时尝试访问< span class="docutils literal">__slots__的问题。感谢Patryk Zawadzki。合并GH-105。

  • 改进< span class="docutils literal">InheritanceManager,以便通过使用extra(select)添加的任何属性都将传播到子代。感谢Curtis Maloney。合并GH-101,修复GH-34。

  • 添加了 InheritanceManagerMixinInheritanceQuerySetMixinPassThroughManagerMixinQueryManagerMixin,允许将它们的功能与其他自定义管理器/查询集子类(例如GeoDjango中的子类)组合。感谢Douglas Meehan!

2.0 (2014.01.06)

  • 向后不兼容:现在在 Choices 实例中索引将数据库表示转换为可读的选择名称,而不是简单地索引到选择元组的数组中。(之前未记录在案索引到 Choices。)如果您有依赖于索引或切片 Choices 的代码,最简单的解决方法是更改例如 STATUS[1:]list(STATUS)[1:]

  • 修复了在 StatusModel 上添加查询管理器时检查字段名冲突的错误。

  • 可以将 choices_name 传递给 StatusField 以使用不同的名称作为选择类属性。默认使用 STATUS

  • 可以将模型子类而不是字符串传递给 select_subclasses()。感谢Keryn Knight。合并GH-79。

  • 现在在 Choices 实例上执行深拷贝不再在 getattr 中导致无限递归。感谢Leden。合并GH-75。

  • 现在在管理器和查询集上都可用 get_subclass() 方法。感谢Travis Swicegood。合并GH-82。

  • 修复了在Django 1.6+中带有孙子类的 InheritanceManager 的错误;《select_subclasses(‘child’,‘child__grandchild’)》只会到达子类。感谢Keryn Knight的报告和提出的修复方案。

  • MonitorField 现在接受一个“when”参数。只有在字段更改为指定的值之一时才会更新。

1.5.0 (2013.08.29)

  • Choices 现在接受选项分组。修复GH-14。

  • Choices 现在可以添加到其他 Choices 或任何可迭代的对象中,并且可以与其自身进行比较。感谢Tony Aldridge。(合并GH-76。)

  • Choices 现在包含其Python标识符值。__contains__。感谢Keryn Knight。(合并GH-69。)

  • 修复了保存时由于存在未跟踪的字段而导致的 KeyError 错误。感谢Mikhail Silonov。(合并GH-70,修复GH-71。)

  • 修复了在继承模型上使用 FieldTracker 的错误。修复GH-57。

  • 将可变字段支持添加到 FieldTracker(合并GH-73,修复GH-74)。

1.4.0 (2013.06.03)

  • FieldTracker 介绍为 ModelTracker 的替代品,后者现在已弃用。

  • PassThroughManager.for_queryset_class() 现在不再忽略超类 get_query_set。感谢Andy Freeland。

  • 修复了在Django 1.6中带有孙子类的 InheritanceManager 的错误。感谢CrazyCasta。

  • StatusField 添加了 get_FOO_display 方法。修复GH-41。

1.3.1 (2013.04.11)

  • 在测试中为 BooleanField 添加了明确的默认值,以实现与Django trunk的兼容性。

  • 修复了 StatusField 的间歇性错误。修复GH-29。

  • 添加了对Python 3的支持。

  • 删除了对Django 1.2和1.3的支持。需要Django 1.4.2+。

1.3.0 (2013.03.27)

  • 允许为 StatusField 指定默认值。感谢Felipe Prenholato。

  • 修复了在子类动态 PassThroughManagerRelatedManager 上调用 create() 的错误。感谢SeiryuZ的报告。修复GH-24。

  • InheritanceQuerySet 中添加了对https://code.djangoproject.com/ticket/16855的处理方案,以避免覆盖先前的 select_related() 调用。感谢ivirabyan。

  • InheritanceManager 中添加了对任意级别的模型继承的支持。感谢ivirabyan。(由于https://code.djangoproject.com/ticket/16572,此功能仅在Django 1.6+中工作。)

  • 添加了用于在模型保存之间跟踪字段变化的 ModelTracker。感谢Trey Hunner。

1.2.0 (2013.01.27)

  • 将主要开发从Bitbucket迁移到GitHub。Bitbucket 镜像将继续接收更新;一旦其中跟踪的所有问题都得到解决,Bitbucket 问题跟踪器将关闭。

  • 删除了已弃用的 ChoiceEnumInheritanceCastModelInheritanceCastManagermanager_from

  • 修复了 PassThroughManager 的序列化。感谢 Rinat Shigapov。

  • QueryManager 上设置 use_for_related_fields = True

  • Choices 添加了 __len__ 方法。感谢 Ryan Kaskel 和 James Oakley。

  • 修复了 Django 1.5 上的 InheritanceQuerySet。感谢 Javier Garcia Sogo。

1.1.0 (2012.04.13)

  • 更新了 AutoCreatedField,AutoLastModifiedField,MonitorField 和 TimeFramedModel,使其在 Django 1.4 上使用 django.utils.timezone.now。感谢 Donald Stufft。

  • 修复了 InheritanceQuerysets 的注释。感谢 Jeff Elmore 和 Facundo Gaich。

  • 停止支持 Python 2.5 和 Django 1.1。这两个版本不再支持安全修复,不应使用。

  • 添加了 PassThroughManager.for_queryset_class(),修复了与相关字段一起使用 PassThroughManager 的问题。感谢 Ryan Kaskel 提供的报告和修复。

  • 添加了 InheritanceManager.get_subclass()。感谢 smacker。

1.0.0 (2011.06.16)

  • 修复了在抽象基模型上使用 SplitField 的问题。

  • 修复了问题 #8,将 use_for_related_fields = True 添加到 InheritanceManager

  • 添加了 PassThroughManager。感谢 Paul McLanahan。

  • InheritanceCastModelmanager_from 和 Django 1.1 支持添加了待弃用警告。删除了已弃用工具的文档。将 ChoiceEnum 从待弃用状态提升为弃用。

  • 修复了问题 #6,InheritanceManager 和描述符字段(例如 FileField)的 bug。感谢 zyegfryed 提供的修复和 sayane 进行测试。

0.6.0 (2011.02.18)

  • 将 SplitField 更新为定义 get_prep_value 而不是 get_db_prep_value。这避免了 Django trunk/1.3 上的弃用警告,但使 SplitField 与 1.2 版本之前的 Django 版本不兼容。

  • 添加了 InheritanceManager,这是选择 Django 1.2+ 子类实例的更好方法。感谢 Jeff Elmore。

  • 添加了 InheritanceCastManager 和 InheritanceCastQuerySet,允许批量将查询集转换为子类型。感谢 Gregor Muellegger。

0.5.0 (2010.09.24)

  • 添加了 manager_from(感谢 George Sakkis)

  • 添加了 StatusField,MonitorField,TimeFramedModel 和 StatusModel(感谢 Jannis Leidel)

  • 弃用了 ChoiceEnum 并用 Choices 替换

0.4.0 (2010.03.16)

  • 添加了 SplitField

  • 添加了 ChoiceEnum

  • 为自定义模型字段添加了 South 支持

0.3.0

  • 添加了 QueryManager

项目详情


下载文件

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

源代码分发

django_model_utils-5.0.0.tar.gz (80.6 kB 查看哈希值)

上传时间 源代码

构建分发

django_model_utils-5.0.0-py3-none-any.whl (42.6 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面