Некоторое время назад я завершил аналогичную функциональность.Вот что вам нужно сделать: создать модель статуса утверждения и иметь разные варианты утверждения, то есть каждый объект модели представляет свою стадию утверждения. Также у вас должна быть модель StatusHistory, которая отражает текущий статус вашей статьи (например)..
class Article(models.Model)
title=models.CharField(max_length=32)
body=models.TextField()
class ApprovalStatus(models.Model):
name=models.CharField(max_length=32)
alias=models.CharField(max_length=32,pk=True)
class StatusHistory(models.Model):
status=models.ForeignKey(ApprovalStatus)
article=models.ForeignKey(Article)
current=models.BooleanField(default=True)
Таким образом, когда вы изменяете статус статьи в вашем администраторе, создается новый объект StatusHistory, а старому объекту присваивается переменная current = False.Этот подход кажется немного громоздким, но когда вы его реализуете, все, что вам нужно, легко попадает в ORM: история состояний - это просто список всех объектов, изменения в рабочем процессе включают только создание нового статуса утверждения и изменение ваших жестко запрограммированных подпрограмм потока состояний