python 一个模型mixin,它跟踪模型字段的值并提供一些有用的api来了解哪些字段已被更改。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 一个模型mixin,它跟踪模型字段的值并提供一些有用的api来了解哪些字段已被更改。相关的知识,希望对你有一定的参考价值。

from django.forms.models import model_to_dict


class ModelDiffMixin(object):
    """
    A model mixin that tracks model fields' values and provide some useful api
    to know what fields have been changed.
    """

    def __init__(self, *args, **kwargs):
        super(ModelDiffMixin, self).__init__(*args, **kwargs)
        self.__initial = self._dict

    @property
    def diff(self):
        d1 = self.__initial
        d2 = self._dict
        diffs = [(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]]
        return dict(diffs)

    @property
    def has_changed(self):
        return bool(self.diff)

    @property
    def changed_fields(self):
        return self.diff.keys()

    def get_field_diff(self, field_name):
        """
        Returns a diff for field if it's changed and None otherwise.
        """
        return self.diff.get(field_name, None)

以上是关于python 一个模型mixin,它跟踪模型字段的值并提供一些有用的api来了解哪些字段已被更改。的主要内容,如果未能解决你的问题,请参考以下文章

用 Tastypie 覆盖模型字段

Libtorch:无法加载跟踪的 lstm 脚本模型

有没有办法通过 mixin 设置 peewee 字段?

Python/Django:数据库模型中字段“类型”的同义词(保留的内置符号)

Django 模型字段默认基于同一模型中的另一个字段

Django 数据模型的字段列表整理