Ich benutzte django-audit-log und ich bin sehr zufrieden.
Django-Audit-Protokoll kann mehrere Modelle in jeder eigenen zusätzlichen Tabelle verfolgen. Alle diese Tabellen sind ziemlich einheitlich, so dass es ziemlich einfach sein sollte, eine SQL-Ansicht zu erstellen, die Daten für alle Modelle anzeigt.
Hier ist, was ich habe ein einziges Modell zu verfolgen getan („Pauza“):
class Pauza(models.Model):
started = models.TimeField(null=True, blank=False)
ended = models.TimeField(null=True, blank=True)
#... more fields ...
audit_log = AuditLog()
Wenn Sie Änderungen in Django Admin zeigen wollen, können Sie eine unmanaged model erstellen (aber dies ist kein erforderlichen Mittel):
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'
Tabelle testapp_pauzaauditlogentry
wird automatisch durch django-Audit-Log erstellt, schafft dies lediglich ein Modell für die Daten von ihr angezeigt werden. Es kann eine gute Idee sein, in einigen rohen Manipulationsschutz zu werfen:
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')
Wie gesagt, ich denke, Sie eine SQL-Ansicht mit den vier action_
Felder erzeugen könnten und ein zusätzliches ‚action_model‘ Feld, das varchar enthalten könnte Verweise auf Modell selbst (vielleicht nur der ursprüngliche Tabellenname).
Ich frage mich, ob wir 'Triggers' in' PostgreSQL' schreiben, das die Log-Tabelle füllen würde, wenn eine neue Zeile in Artikel, Medien, Kommentare usw. eingefügt wird. Ist das eine gute Idee ?? –
Hängt davon ab. Was, wenn Sie in Zukunft eine Situation haben, in der ein Benutzer einen Artikel hochladen kann, der Medien enthält (möglich, oder?) Und dies in einem einzigen Web-Service-Anruf behandelt wird? – ArjunShankar
Wahr .. !! .. ich werde es sehen .. !! .. tatsächlich sind die Dienste alle komplett .. !! .. ich denke, ich muss nicht einen zusätzlichen Code..new thanx ..! ! –