一个简单的django应用程序,可以让您的模型跟踪所有更改。
django-changeset的Python项目详细描述
django changeset是一个简单的django应用程序,它可以让您的模型跟踪所有更改。这取决于 django_userforeignkey以确定正在进行更改的当前用户。
目前,django 1.11、2.0和2.1都是通过travis ci支持和测试的。
详细文档在docs子目录中。
快速启动
- 使用pip安装并下载django变更集(和django-userforeignkey):
pip install django-changeset
- 将django_userforeignkey和django_changeset添加到INSTALLED_APPS中,如下所示:
INSTALLED_APPS=[...'django_userforeignkey','django_changeset',]
- 将django_userforeignkey.middleware.UserForeignKeyMiddleware添加到MIDDLEWARE中,如下所示:
MIDDLEWARE=(...'django.contrib.auth.middleware.AuthenticationMiddleware',...'django_userforeignkey.middleware.UserForeignKeyMiddleware',)
注意:确保在djangosAuthenticationMiddleware之后插入UserForeignKeyMiddleware。
示例用法
- < d> >使用{tt11}$作为模型的混入类,并添加要在meta 中跟踪的字段
- 使用track_fields和track_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_by,created_at,last_modified_by,last_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_by,created_at,last_modified_by,last_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月-添加了通用关系跟踪和改进的日志记录(候选发布版)