一个简单的django应用程序,可以让您的模型跟踪所有更改。

django-changeset的Python项目详细描述


https://travis-ci.org/beachmachine/django-changeset.svg?branch=master

django changeset是一个简单的django应用程序,它可以让您的模型跟踪所有更改。这取决于 django_userforeignkey以确定正在进行更改的当前用户。

目前,django 1.11、2.0和2.1都是通过travis ci支持和测试的。

详细文档在docs子目录中。

快速启动

  1. 使用pip安装并下载django变更集(和django-userforeignkey):
pip install django-changeset
  1. django_userforeignkeydjango_changeset添加到INSTALLED_APPS中,如下所示:
INSTALLED_APPS=[...'django_userforeignkey','django_changeset',]
  1. django_userforeignkey.middleware.UserForeignKeyMiddleware添加到MIDDLEWARE中,如下所示:
MIDDLEWARE=(...'django.contrib.auth.middleware.AuthenticationMiddleware',...'django_userforeignkey.middleware.UserForeignKeyMiddleware',)

注意:确保在djangosAuthenticationMiddleware之后插入UserForeignKeyMiddleware

示例用法

< d> >使用{tt11}$作为模型的混入类,并添加要在meta 中跟踪的字段
使用track_fieldstrack_related进行配置。还可以使用changesets = ChangeSetRelation()
ChangeSet添加泛型关系
fromdjango.dbimportmodelsfromdjango_changeset.modelsimportRevisionModelMixinfromdjango_changeset.models.fieldsimportChangeSetRelationclassMyModel(models.Model,RevisionModelMixin):classMeta:track_fields=('my_data',)# track changes on my_datatrack_related=('my_ref',)# track changes on a related modelmy_data=models.CharField(max_length=64,verbose_name="Very important data you want to track")my_ref=models.ForeignKey('SomeOtherModel',verbose_name="Very important relation",related_name='my_models')# Generic Relation to ChangeSetchangesets=ChangeSetRelation()

注意:如果您想访问属性created_bycreated_atlast_modified_bylast_modified_at, 您需要从CreatedModifiedByMixin以及RevisionModelMixin继承。为了让python mro工作,您还需要 必须创建抽象基础模型:

fromdjango.dbimportmodelsfromdjango_changeset.modelsimportCreatedModifiedByMixin,RevisionModelMixinfromdjango_changeset.models.fieldsimportChangeSetRelationclassBaseModel(models.Model):"""
    BaseModel is needed for proper MRO within Python/Django Models
    """classMeta:abstract=TruepassclassMyModel(BaseModel,RevisionModelMixin,CreatedModifiedByMixin):classMeta:track_fields=('my_data',)# track changes on my_datatrack_related=('my_ref',)# track changes on a related modelmy_data=models.CharField(max_length=64,verbose_name="Very important data you want to track")my_ref=models.ForeignKey('SomeOtherModel',verbose_name="Very important relation",related_name='my_models')# Generic Relation to ChangeSetchangesets=ChangeSetRelation()

通过变更集关系查询变更集

继承从{TT11} $和^ {TT20}$MIXIN,并添加类型{{TT24} $(Acth{TT25}$为变更集)的属性,将以下特性添加到模型中:

  • 属性created_bycreated_atlast_modified_bylast_modified_at可用于每个对象(CreatedModifiedByMixin
  • 关系changesets可用,允许您运行如下查询: MyModel.objects.filter(changesets__changeset_type='I',changesets__user__username='johndoe')

访问变更集和变更记录

待办事项

您可以通过调用MyModel实例的change_set属性来访问变更集,如 以下示例:

print("------- CHANGE SETS (",len(somemodel.changesets),")---------")forchange_setinsomemodel.changesets:# print change_setprint("Change was carried out at ",change_set.date," by user ",change_set.user," on model ",change_set.object_type)print("  + CHANGE RECORDS (",len(change_set.change_records.all()),"): ")forchange_recordinchange_set.change_records.all():print("\t",change_record)print("\tIs change on a related field?",change_record.is_related)# related fields: we only know that something new has been added. we know the PK, but not the object itselfprint("\t\tChanged field ",change_record.field_name,"(",change_record.field_verbose_name,") from ",change_record.old_value,"(display:",change_record.old_value_display,") to")print("\t\t ",change_record.new_value,"(display:",change_record.new_value_display,")")ifchange_record.is_related:print("\t\tRelated Object Info: ",change_record.related_object)# TODO:# change_set.created_at, change_set.created_by, change_set.last_modified_by, change_set.last_modified_atprint("-----")

维护人员

此存储库当前由

  • 海滩机器
  • 克里斯蒂安克鲁兹伯格

欢迎拉取请求。

许可证

django变更集使用bsd-3子句license,请参见license file。

更改日志/发布历史记录

1.0.0rc3-2018年8月-第一个功能完整发布(候选发布) 1.0.0rc4-2018年10月-添加了通用关系跟踪和改进的日志记录(候选发布版)

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

推荐PyPI第三方库


热门话题
带有服务类安卓的java altbeacon   java在OpenXava免费版本中可以创建多个用户吗?   java如何决定定义变量“private”?   java为什么GetMethodID()对不存在的方法不返回NULL?   java Get JComboBox项字符串表示法   java如何在ifs之间设置限制?   java Android错误:IllegalStateException   JavaSpring4MVC语言环境已更改,但JSP对此没有响应   java Netbeans:如何构建。jar文件随附外部文件。jar库?   Spring Petclinic项目Maven编译时出现java错误   声明Java数组增量元素的快速方法   java无法使用相对xpath找到元素   javascript无法更改标题,也无法在操作栏上显示图标   java标签不是一个接一个地动态创建的   java如何使用ThymeLeaf将对象的属性绑定到隐藏字段?   java从EJB无状态会话bean调用CDI会话范围的生产者方法   java为什么num+=array[i]与for循环中的num=num+array[i]的工作方式不同   使用jsonsimple实现jQuery UI自动完成的java JSON格式   JavaFaceletsUI:重复标记中断JSF表单验证