在django模型中调用函数

时间:2012-09-18 18:39:26

标签: django

我有一个待办事项列表应用。为了保留已完成的动作的历史记录,我想在任务从完成到完成时创建动作的新实例。因此,每当行动完成时,我都会有一份副本。

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会对自身进行深度复制,然后需要更改其某些属性的值(例如,有一个属性,使动作再次发生。我需要关闭它,否则它将不断尝试从完全状态转变为不完整状态。)

当我调用remove_attrs(self)时,它似乎不起作用。如何调用def remove_attrs(self)?

1 个答案:

答案 0 :(得分:0)

因为它是一个方法,所以在对象上调用它。

self.remove_attrs()