В настоящий момент я думаю о том, как лучше всего реализовать регистрацию изменений в Модели, чтобы обеспечить некоторую форму контрольного журнала для объекта.
] Я изучал 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]
Теоретически это должно работать, однако у меня сохраняется ощущение, что это не лучший вариант. способ сделать это. Есть ли лучший способ сделать что-то подобное?