一个Django应用程序,用于跟踪对模型字段的更改。

django-field-histor的Python项目详细描述


=======
django字段历史
======


图片::https://badge.fury.io/py/django field history.svg
:目标:https://badge.fury.io/py/django field history

…图片::https://readthedocs.org/projects/django-field-history/badge/?version=latest
:目标:https://django-field-history.readthedocs.io/en/latest/?徽章=最新
:alt:文档状态

…图片::https://travis-ci.org/grantmcconnaughey/django-field-history.svg?branch=master
:目标:https://travis ci.org/grantmcconnaughey/django field history

…图片::https://coveralls.io/repos/github/grantmcconnaughey/django-field-history/badge.svg?branch=master
:目标:https://coveralls.io/github/grantmcconnaughey/django-field-history?branch=master

django应用程序,用于跟踪对模型字段的更改。对于python 2.7/3.4+和django 1.11/2.0+。

哪个跟踪*所有*模型字段。

+???+???+???+???+???+???+???
项目Django字段历史Django恢复Django简单历史|
+——+——+————————+—————————————————————————————————————————————————————————————————————————————|
+——+——+————————+—————————————————————————————————————————————————————————————————————————————|
+——+——+————————+———————————————————————————————————————————————————————————————————————————|
+——+——+————————+—————————————————————————————————————————————————————————————————————————————|
+——+——+————————+——————————————————————————————————————————————————————————————————————————————|
+——+——+————————+————————————————————————————————————————————————————————————————————————————|
+——+——+————————+———————————————————————————————————————————————————————————————————————————|
+——+——+————————+———————————————————————————————————————————————————————————————————————————————|
+——+——+——————+——————————————————————————————————————————————————————————————————————————————————————————``最新的``)
+——+——+——————+————+—————————————————————————————————————————————————————————————————————————|
+——+——+——————+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————更改特定模型的字段。
*存储该字段的名称、值、更改日期和时间以及更改该字段的用户。
*适用于所有模型字段类型(除了"manytomanyfield`"。


quickstart
——


install django field history::


请确保将其放入已安装的应用程序中。代码块::python

代码块::python

from field_history.tracker import fieldhistorytracker


class pizzaorder(models.model):
状态选择=(
('ordered','ordered'),
('cooking','cooking'),
('complete','complete'),

status=models.charfield(max_length=64,choices=status_choices)


field_history=fieldhistorytracker(['status'])


现在,每次更改订单的status字段时,有关该更改的信息都将存储在数据库中。

代码块::python


从field\history.models导入fieldhistory

field history.objects.count()==1

history.date\u created不是none

自定义fieldhistory manager
histories2=fieldhistory.objects.get_for_model_and_field(比萨订单,"status")
assert list(histories)==list(histories2)

=histories.latest()
assert updated_history.object==pizza_order
assert updated_history.field_name==status
assert updated_history.field_value==cooking
assert updated_history.date_created不是none

management命令
----

django field history附带一些管理命令。

+++++++++++++++++++++一个"FieldHistoryTracker"。第一次安装django字段历史记录时运行此命令。

::


renamefieldhistory
+++++++++++++python manage.py renameFieldHistory--model=app_label.model_name--from_field=old_field_name--to_field=new_field_name

代码块::python

username=models.charfield(最大长度=255)


field\history=fieldhistoryretracker(['username'])

代码块::python

class person(models.model):
handle=models.charfield(最大长度=255)


field history=fieldhistorytracker(['handle'])

模型:

python manage.py renameFieldHistory--model=myapp.person--from_field=username--to_field=handle

有两种方法可以存储更改模型字段的用户。最简单的方法是使用发出请求的**登录用户**。为此,请将"FieldHistoryMiddleware"类添加到"Middleware"设置中。

…代码块::python

middleware=[
'django.contrib.sessions.middleware.sessionmiddleware',
'django.middleware.common.commonmiddleware',
'django.contrib.auth.middleware.authenticationmiddleware',
"field\u history.middleware.fieldhistorymiddleware",
]


或者,可以将"field\u history\u user"属性添加到具有要跟踪的字段的模型中。更新字段时,此属性应返回希望存储在"fieldhistory"中的用户。

…代码块::python

class pizza(models.model):
name=models.charfield(max_length=255)
updated_by=models.foreignkey('auth.user')


field history=fieldhistorytracker(['name'])

@property
def_ field_history_user(self):
返回self.updated_by


使用mysql时,如果使用mysql,则运行迁移时默认配置将引发异常。(默认情况下,``fieldhistory.object_id``被实现为``textfield``以获得灵活性,但是mysql innodb表中的索引列可能最多为767字节。)要解决此问题,可以在settings.py中设置"field_history_object_id_type",以使用满足mysql约束的字段类型覆盖默认字段类型。`` field_history_object_id_type``可以设置为:


1。要使用的django模型字段类,或
2。元组``(field_class,kwargs)``,其中``field_class``是一个django模型字段类,``kwargs``是要传递给字段类构造函数的参数的dict。

通过在settings.py中添加以下内容,将"object\u id"配置为使用"charfield"。代码块::python

from django.db import models
field_history_object_id_type=(models.charfield,{'max_length':100})

`` field_history_object_id_type``还允许您使用对您的用例更有效的字段类型,即使您使用的是postgres(或类似的无约束数据库)。例如,如果总是让django自动创建一个"id"字段(在内部实现为"auto field"),那么将"field"history"object"id"type"设置为"integerfield"将提高效率(在时间和空间上)。这看起来像:

…代码块::来自django.db import models的python





>source<;youvirtuallenv>;bin/activat
(myenv)$pip install-r requirements test.txt
(myenv)$python runtests.py






























+++++++++++++++++++++++.0条以及2.1
*增加了对python 3.7的支持
*减少了对django 1.7到1.10的支持
*减少了对python 3.2和3.3的支持
*使用"createinitialfieldhistory"命令(20)修复了通用主键错误

0.6.0(2016年12月22日)
+++++++++++++++++django 1.10兼容性。
*增加了mysql兼容性。
*修复了复制跟踪字段的问题。

0.5.0(4月16日,2016年)
+++++++++++++++++++++++++++++++++++++
*增加了追踪父模型历史的能力。
*增加了django 1.7兼容性。

0.4.0(2月24日,2016年)
+++++++++++++++++++++++++++++++++++++++++++++++
*添加了一种自动将登录用户存储在``fieldhistory.user``.

0.3.0(2016年2月20日)
+++++++++++++++++++++++++

*``fieldhistory``对象现在是使用``bulk\u create``创建的,这意味着即使同时更改多个字段,也只执行一个查询。
*添加了一种存储哪个用户更新了字段的方法。
*将``get\u latest`by``添加到``fieldhistory``元选项,以便``.latest()``和`.earliest()``可以使用。
*添加了``createInitialFieldHistory``管理命令。
*添加了``renameFieldHistory``管理命令。

<0.2.0(2016年2月17日)
++++++++++++++++++++++++++++++++++++++++++++++

*pypi的第一个版本。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用spring并在CXF中生成服务器和客户端   重载是否可以重载抽象Java类中的抽象方法,但只实现子类中的一个重载方法?   javawhy系统。currentTimeMillis()是否生成不正确的长值?   java使用Apache POI API将xlsx转换为csv   资源Java找不到文件?   java APDU命令验证返回6a88   JAVAlang.ExceptionInInitializerError是在交换机中构造对象时创建的   java使用嵌套while循环打印星形金字塔   sql Java ResultSet获取返回的字段名   java无法将字符串更改为整数,因为负号跟在数字后面   为什么番石榴/爪哇使用“可能”。isPresent()与可选项相反。是否显示(可能)?   JavaJUnit4看不到bean   JavaJBoss以错误的顺序启动servlet   java无法下载Maven依赖项AnypointStudio   安卓如何在java中存储持久数据   java SQL Server JDBC的驱动程序类名是什么   java中针对大输入的性能优化BufferedReader   java eclipse自动完成内容助理