马蒂·阿尔钦在普罗詹戈书中的历史记录。

django-historicalrecords-rca的Python项目详细描述


这是马蒂·阿尔钦的书。

设置virtualenv

$ virtualenv --no-site-packages ve
$ source ve/bin/activate
(ve)$ pip install -r requirements.pip

或者从pypi安装

$ pip install django-historicalrecords

导入historicalrecords并将其附加到您的模型,就像您将其作为自定义django管理器一样。

from django.db import models
from history.models import HistoricalRecords

class TestModel(models.Model):
    """A model for testing"""
    boolean = models.BooleanField(default=True)
    characters = models.CharField(blank=True, max_length=100)

    history = HistoricalRecords()

    class Admin:
        list_display = ('',)
        search_fields = ('',)

    def __unicode__(self):
        return u"TestModel"

如果运行manage.py syncdb您将看到它会自动创建您附加到的任何模型的历史版本。

(ve)$ ./manage.py syncdb
Creating table auth_permission
... // snip // ...
Creating table example_app_historicaltestmodel <- HistoricalTestModel!
Creating table example_app_testmodel
... // snip // ...

historicalrecords克隆它附加到的模型,并添加一些额外的字段,允许您跟踪所做更改的类型、保存更改时的时间戳,以及在更改时返回原始对象的描述符。

(ve)$ ./manage.py shell
>>> from example_app.models import TestModel
>>> tm = TestModel.objects.create(boolean=True,characters="abc")
>>> tm.history.count()
1
>>> most_recent = tm.history.most_recent()
>>> most_recent.boolean
True
>>> most_recent.characters
u'abc'
>>> tm.boolean = False
>>> tm.characters = "def"
>>> tm.save()
>>> tm.history.count()
2
>>> tm.history.all()
[<HistoricalTestModel: TestModel as of 2010-09-10 03:29:59.424761>, <HistoricalTestModel: TestModel as of 2010-09-10 03:28:31.358548>]
>>> from datetime import datetime
>>> timestamp = datetime(2010,9,10,3,28,31,358548)
>>> old_version = tm.history.as_of(timestamp)
>>> old_version.boolean
True
>>> tm.boolean
False
>>> old_version.characters
u'abc'
>>> tm.characters
'def'
>>>

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

推荐PyPI第三方库


热门话题
java什么构造使私有serialversionUID有用?   java如何向JSP发送参数并在Spring MVC中更新   java测试Glassfish启动行为   java需要多应用程序IPC的一些指导   java从SQLite检索随机数据   java Apache Flink:NoSuchMethodError在提交Flink作业时出错   java为什么两个具有相同PK的插入成功?如何更新重复密钥?   java输出总是输出else语句   pdfbox Java从PDF文件中提取非重复单词   java For相同的api gson正在工作,但jackson无法解析repsonse,从而向变量返回空值   java从TestNG迁移到JUnit4,处理junitparams@Parameters注释所需的静态方法   java Hibernate检索不带Blob字节数组的文件列表[]   base64 Java加密:Java加密:javax。加密。IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数   java如何检查文件的扫描程序内容并使用它们分配输入,而不使用nextLine跳过数据?   java TestNG Eclipse插件:如何更改[New>TestNG类]方法的名称前缀?   将信息读入数组时的java格式问题   java获取jsp会话中存储的对象的属性   java如何获取由特定字符集的一系列ASCII值表示的字符?   java如何以编程方式使会话无效?   SpringMVC中的JavaJSON读取JSON数据,在jsp中解析并呈现它