0

やることリストアプリがあります。完了したアクションの履歴を保持するために、タスクが完了から未完了になるたびに、アクションの新しいインスタンスを作成したいと思います。したがって、アクションが完了するたびにコピーを取得します。

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メソッドで、アクションが完全から不完全に移行する場合、アクションはそれ自体のディープコピーを作成し、その属性の値を変更する必要があります(たとえば、アクションを作成する属性があります)。再発します。これをオフにする必要があります。オフにしないと、常に完全な状態から不完全な状態に移行しようとします)。

remove_attrs(self)を呼び出すと、機能していないようです。def remove_attrs(self)を呼び出すにはどうすればよいですか?

4

1 に答える 1

0

これはメソッドなので、オブジェクトで呼び出します。

self.remove_attrs()
于 2012-09-18T18:41:05.180 に答える