方法生成"更改历史"在model.save中没有按预期工作

时间:2018-06-13 05:20:54

标签: django

我有一个类Account,代表我的应用程序中的客户。

我想通过将它们记录到我的数据库中来跟踪Account的所有更改。

我想要实现的一个例子:

  

用户A将Account.is_abandoned从False更改为True

为此,我创建了一个类Entry,可以将其视为存储上面的块引用的日志条目。

我正在尝试合并this recipe

def save(self, *args, **kwargs):
    """Overriding this to create an Entry in the corresponding Timeline.

    Pass in user=User for Entry Creation.

    See this link for the recipe.
    """
    old = type(self).objects.get(pk=self.pk) if self.pk else None
    user = kwargs.pop('user', None)
    super().save(*args, **kwargs)

    if not old:
        return

    changes = {}
    for attr in ['instance', 'status', 'spent_in_hkd',
                 'is_attention_required', 'is_abandoned',
                 'is_spending']:
        if getattr(old, attr) != getattr(self, attr):
            changes[attr] = (getattr(old, attr), getattr(self, attr))
    if not changes:
        logging.debug('EntryNotCreated: No changes detected.')
        return
    cs = '\n'.join(['{}: {} -> {}'.format(k, v1, v2) for k, (v1, v2) in changes.items()])

    entry = Entry.objects.create(
        user=user,
        account=self,
        content=cs
    )
    entry.save()

我的问题是,即使我通过Django的通用UpdateView更改了它,有时这种方法也无法检测到任何变化。

任何想法为什么?

0 个答案:

没有答案