def get_revision_of_object(obj): """ returns teh version of the passed object @param obj: @return: """ return getattr(obj, get_version_fieldname(obj))
def is_changed(obj): """ returns True if `obj` is changed or deleted on the database :param obj: :return: """ revision_field = get_version_fieldname(obj) version = get_revision_of_object(obj) return not obj.__class__.objects.filter(**{obj._meta.pk.name: obj.pk, revision_field: version}).exists()
def get_version(model_instance, version): """ try go load from the database one object with specific version :param model_instance: instance in memory :param version: version number :return: """ version_field = get_version_fieldname(model_instance) kwargs = {'pk': model_instance.pk, version_field: version} return model_instance.__class__.objects.get(**kwargs)