Django模型混合工具
项目描述
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 参数为关键字参数
JoinManager 和 JoinManagerMixin 已弃用;请使用 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)
修复多个 MonitorField 和 defer() 或 only() 时的无限递归问题,在 Django 1.10+ 上。感谢 Romain Garrigues。合并 GH-242,修复 GH-241。
修复 InheritanceManager 和 SoftDeletableManager 以尊重 self._queryset_class 而不是硬编码查询集类。合并 GH-250,修复 GH-249。
根据文档添加 SoftDeletableQuerySet 和 SoftDeletableManager 混合。
修复 SoftDeletableModel.delete() 以使用正确的数据库连接。合并 GH-239。
在 SoftDeletableModel.delete() 中添加布尔关键字参数 soft,当设置为 False 时将回退到默认行为。合并 GH-240。
在< cite >StatusModel cite >中强制使用默认管理器,以避免使用重新定义< cite >objects cite >管理器的抽象模型时出现管理器顺序问题。合并GH-253,修复GH-251。
2.6 (2016.09.19)
添加了抽象类< cite >SoftDeletableModel cite >,其管理器< cite >SoftDeletableManager cite >和查询集< cite >SoftDeletableQuerySet cite >。
修复了Django 1.10中字段跟踪器和延迟FileField的问题。
2.5.2 (2016.08.09)
将< cite >runtests.py cite >包含在sdist中。
2.5.1 (2016.08.03)
修复了在Django 1.9下< cite >InheritanceQuerySet cite >引发< cite >AttributeError cite >异常的问题。
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 cite >。改用Django内置的< cite >QuerySet.as_manager() cite >和/或< cite >Manager.from_queryset() cite >实用工具。
添加对Django 1.9的支持。
2.3.1 (2015-07-20)
从< cite >setup.py cite >中删除所有与翻译相关的自动化。修复了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 >方法或< span class="docutils literal">post_save span >处理程序中访问< span class="docutils literal">FieldTracker span>更改的能力。这重新打开了GH-83(无法序列化带有< span class="docutils literal">FieldTracker span>的模型)直到找到不破坏其他行为的解决方案。感谢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>和< span class="docutils literal">StatusField span>。
< span class="docutils literal">PassThroughManager span>现在支持通过< span class="docutils literal">dir span>查看公开的方法,这使得IPython的tab补全变得有用。合并GH-104,修复GH-55。
为使用< span class="docutils literal">FieldTracker span>的模型添加pickle支持。感谢Ondrej Slintak的报告。感谢Matthew Schinckel的修复。合并GH-130,修复GH-83。
2.0.3 (2014.03.19)
修复了< span class="docutils literal">PassThroughManager span>中的< span class="docutils literal">get_query_set span>与< span class="docutils literal">get_queryset span>问题,适用于Django <1.6。修复了相关管理器未正确过滤关系的问题。感谢whop、Bojan Mihelac、Daniel Shapiro和Matthew Schinckel的报告;Matthew进行了修复。合并GH-121。
修复了具有延迟模型属性的< span class="docutils literal">FieldTracker span>。感谢Michael van Tellingen。合并GH-115。
修复了具有自引用FK的< span class="docutils literal">InheritanceManager span>;避免无限递归。感谢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>时尝试访问< span class="docutils literal">__slots__ span>的问题。感谢Patryk Zawadzki。合并GH-105。
改进< span class="docutils literal">InheritanceManager span>,以便通过使用extra(select)添加的任何属性都将传播到子代。感谢Curtis Maloney。合并GH-101,修复GH-34。
添加了 InheritanceManagerMixin、InheritanceQuerySetMixin、PassThroughManagerMixin 和 QueryManagerMixin,允许将它们的功能与其他自定义管理器/查询集子类(例如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。
修复了在子类动态 PassThroughManager 的 RelatedManager 上调用 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)
删除了已弃用的 ChoiceEnum,InheritanceCastModel,InheritanceCastManager 和 manager_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。
为 InheritanceCastModel,manager_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
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。