我用django-audit-log,我很满意。
Django审计日志可以跟踪多个模型,每个模型都在它自己的附加表中。所有这些表格都非常统一,因此创建一个显示所有模型数据的SQL视图应该相当简单。
这里是我做了什么,以跟踪单个模型(“Pauza”):
class Pauza(models.Model):
started = models.TimeField(null=True, blank=False)
ended = models.TimeField(null=True, blank=True)
#... more fields ...
audit_log = AuditLog()
如果你想改变在Django管理展示,您可以创建一个unmanaged model(但这绝不装置需要):
class PauzaAction(models.Model):
started = models.TimeField(null=True, blank=True)
ended = models.TimeField(null=True, blank=True)
#... more fields ...
# fields added by Audit Trail:
action_id = models.PositiveIntegerField(primary_key=True, default=1, blank=True)
action_user = models.ForeignKey(User, null=True, blank=True)
action_date = models.DateTimeField(null=True, blank=True)
action_type = models.CharField(max_length=31, choices=(('I', 'create'), ('U', 'update'), ('D', 'delete'),), null=True, blank=True)
pauza = models.ForeignKey(Pauza, db_column='id', on_delete=models.DO_NOTHING, default=0, null=True, blank=True)
class Meta:
db_table = 'testapp_pauzaauditlogentry'
managed = False
app_label = 'testapp'
表testapp_pauzaauditlogentry
自动由django的审计日志创建的,这仅仅是创建用于从它显示数据的模型。 这可能是在一些粗鲁的防篡改保护抛出一个好主意:
class PauzaAction(models.Model):
# ... all like above, plus:
def save(self, *args, **kwargs):
raise Exception('Permission Denied')
def delete(self, *args, **kwargs):
raise Exception('Permission Denied')
正如我所说的,我想你可以创建一个有四个action_
场和一个额外的“action_model”字段可能包含VARCHAR一个SQL视图引用模型本身(可能只是原始表名)。
我想知道我们cud在'PostgreSQL'中写了'Triggers',当一个新行插入到Article,Media,Comments表等等时,它会填充Log表。这是个好主意? – 2012-03-30 15:07:22
取决于。如果将来您有一种情况,用户可以上传包含媒体的文章(可能,对吗?),并且这是在单个Web服务调用中处理的? – ArjunShankar 2012-03-30 15:13:13
真.. .. ..我会看到它.. !! ..实际上服务都是完整的.. !! ..我thot可能是我没有把一个额外的代码..通常thanx ..! ! – 2012-03-30 15:40:07