我有一个待办事项列表应用程序。为了保留已完成操作的历史记录,我想在任务从完成到未完成的任何时候创建一个新的操作实例。因此,每次操作完成时,我都会有一份副本。
class Action(models.Model):
name = models.CharField("Action Name", max_length=200)
complete = models.BooleanField(default=False, verbose_name="Complete?")
# And some other attributes
# Cache initial version of record to determine before/after differences
def __init__(self, *args, **kw):
cached_vars = self.__dict__
super(Action, self).__init__(*args, **kw)
var_cache = {}
for var in cached_vars:
var_cache[var] = getattr(self,var)
self.var_cache = var_cache
def remove_attrs(self):
self.complete = True
#Remove some other attributes
def save(self, **kw):
if self.complete:
# Do some stuff
else:
if self.var_cache['complete'] != getattr(self,'complete') and self.id is not None:
new_obj = deepcopy(self)
new_obj.id = None
new_obj.save()
remove_attrs(self)
在上面的代码中,在save方法中,如果Action从完整到不完整,则Action对自身进行深拷贝,然后需要更改其某些属性的值(例如,有一个属性使Action再次发生。我需要将其关闭,否则它将不断尝试从完整状态变为不完整状态)。
当我调用 remove_attrs(self) 时,它似乎不起作用。如何调用 def remove_attrs(self)?