目前我正在考慮如何最好地實現模型上的更改日誌記錄,以便爲對象提供某種形式的審計跟蹤。將項目值更改爲Django對象
我已經研究過django-reversion,並在一定程度上做了我需要它做的事情,但是我的需求比這更簡單。我只想要能夠記錄哪些用戶在更改提交之前更改了對象上的哪個字段以及之前的字段值。
一個簡單的類來存儲,這將是這樣的:
class AuditLogEntry(models.Model):
user = ForeignKey(User, verbose_name=_(u"user"), related_name="actions")
obj = ForeignKey(ModelToLog, verbose_name=_(u"Model"), related_name="history")
timestamp = DateTimeField(default=datetime.now)
field = models.CharField(max_length=64)
value = models.CharField(max_length=256)
在我想的只是在像這樣的東西更新模型視圖處理程序添加的代碼塊的時刻:
form = ModelToLogForm(request.POST, instance=obj)
prev_data = dict()
for changed_field in form.changed_data:
prev_data[changed_field] = form.instance.get_attribute(changed_field)
if form.is_valid():
form.save()
for changed_field in keys(prev_data):
obj.history.create(user=request.user, obj=obj, field=changed_field, value=prev_data[changed_field]
從理論上講,它應該可以工作,但是我總是有一種微妙的感覺,認爲這不是最好的辦法。有沒有更好的方法來做這樣的事情?