django模型更改允许您跟踪模型实例更改。

django-model-changes的Python项目详细描述


django模型更改允许您跟踪模型实例的状态和更改:

快速启动

  1. 安装Django型号更改:

    pip install django-model-changes
    
  2. 将“django_model_changes”添加到已安装的应用程序设置中,如下所示:

    INSTALLED_APPS = (
        ...
        'django_model_changes',
    )
    
  3. < > >将 ChangesMixin > /cTITE添加到您的模型:

    >>> from django.db import models
    >>> from django_model_changes import ChangesMixin
    
    >>> class User(ChangesMixin, models.Model):
    >>>     name = models.CharField(max_length=100)
    
  4. 获取实例更改:

    >>> user = User()
    >>> user.name = 'Foo Bar'
    >>> user.save()
    
    >>> user.name 'I got a new name'
    
    >>> # Get current state
    >>> user.current_state()
    {'id': 1, 'name': 'I got a new name'}
    
    >>> # Get previous state (state after previous save/create/delete)
    >>> user.previous_state()
    {'id': 1, 'name': 'Foo Bar'}
    
    >>> # Get old state (state before previous save/create/delete)
    >>> user.old_state()
    {'id': None, 'name': ''}
    
    >>> # Get changes from the previous state to the current state
    >>> user.changes()
    {'name': ('Foo Bar', 'I got a new name')}
    
    >>> # Get changes from the old state to the current state
    >>> user.old_changes()
    {'id': (None, 1), 'name': ('', 'Foo Bar')}
    
    >>> # Check if the instance was persisted (saved)
    >>> user.was_persisted()
    False
    
    >>> # Check if the instance is persisted
    >>> user.is_persisted()
    True
    
  5. 收听更改:

    >>> from django_model_changes import post_change
    
    >>> def my_callback(sender, instance, **kwargs):
    >>>     # Do something with previous and current state
    >>>     instance.old_state()
    >>>     instance.current_state()
    
    >>>     # There is also a convenience method to get
    >>>     # an instance from the previous state
    >>>     instance.old_instance()
    
    >>> post_change.connect(my_callback, User)
    

概述

django模型更改允许您从 实例:

  1. 当前状态()
    实例的当前状态。
  2. 上一个状态()
    实例在创建、保存或删除 上次。
  3. 旧状态()
    上一个_state(),即实例之前的状态 它是上次创建、保存或删除的。

它还提供了方便的方法来获取状态之间的更改:

  1. 更改()
    从以前的状态更改为当前状态。
  2. 以前的更改()
    从旧状态更改为以前的状态。
  3. 旧的更改()
    从旧状态更改为当前状态。

以及以下方法来确定实例是否在 数据库:

  1. 被持久化了
    实例是否保持其旧状态。
  2. 被持久化
    实例是否保存在当前状态。

此示意图试图说明这些方法如何相互关联:

after create/save/delete            after save/delete                  now
|                                   |                                  |
.-----------------------------------.----------------------------------.
|\                                  |\                                 |\
| \                                 | \                                | \
|  old_state()                      |  previous_state()                |  current_state()
|                                   |                                  |
|-----------------------------------|----------------------------------|
|  previous_changes() (prev - old)  |  changes() (cur - prev)          |
|-----------------------------------|----------------------------------|
|                      old_changes()  (cur - old)                      |
.----------------------------------------------------------------------.
 \                                                                      \
  \                                                                      \
   was_persisted()                                                        is_persisted()

文档

请参阅changes.py中的文档字符串,或生成文档:

>>> pip install Sphinx
>>> cd docs
>>> make html
Open build/html/index.html

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

推荐PyPI第三方库


热门话题
java如何在Robot Framework Selenium中单击元素   java如何在实例化类时运行代码?   java无法访问的图像拖动和缩放错误   在JSTL中将java日期对象转换为毫秒   java中有一些类表示两个日期之间的一段时间,比如org。乔达。时间时期   java值溢出中的循环调试   URL参数JAVA   java如何验证web元素的类型(选择框或文本)   java Set反向安全约束   java如何测试两个字符串是否相互旋转?   java瑞典语文本(vår,än,tall)。试着发邮件。但在收到邮件时,问号(?)在Linux环境中观察到就地重音字符   java如何在多个点之间找到指定点的最短距离?   java如何使用不同的热键添加焦点遍历?   java Hibernate模式生成:相同的配置,不同的行为   创建一个JavaREST客户机来调用SpringBootRESTAPI