基于Django中请求的CRUD应用程序

基于Django中请求的CRUD应用程序,django,Django,我正在尝试创建一个基于请求的crud应用程序,其中用户必须创建一个请求才能创建/编辑/删除。我将描述这样一个简单的例子 class Employee(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) dob = models.DateField() # etc. 现在我想通过添加两个名为Approved和

我正在尝试创建一个基于请求的crud应用程序,其中用户必须创建一个请求才能创建/编辑/删除。我将描述这样一个简单的例子

class Employee(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    dob = models.DateField()
    # etc. 
现在我想通过添加两个名为Approved和Approved by的字段来控制employee的创建,这对我来说很容易

现在的问题是编辑。我想用新旧值创建一个请求。管理员批准后,将新值应用于实例,否则从系统中删除新值

到目前为止,对我来说最好的解决方案是使用Django的ContentType框架。像这样

ACTIONS = (
            ('C', 'Create'),
            ('D', 'Delete'),
            ('U', 'Update')
        )

class Requester(models.Model):

    """
    This is the base of all the requests
    """
    initiated_by = models.ForeignKey('auth.User', verbose_name=_('Initiated By'), related_name="initiated_by")
    reviewed_by = models.ForeignKey('auth.User', verbose_name=_('Reviewd By'), blank=True, null=True, related_name="reviewed_by")
    content_type = models.ForeignKey('contenttypes.ContentType')
    item_id = models.IntegerField(blank=True, null=True)
    action = models.CharField(max_length=1, choices=ACTIONS)
    created_at = models.DateTimeField(_('Created At'), auto_now_add=True)
    reviewed_at = models.DateTimeField(_('Reviewed At'), auto_now=True)
这对我的创建和删除请求很好。但是,更新请求必须临时保存新值。除了创建一个新的模型Ex.Employee并在其中加入新的价值观之外,我找不到其他方法来做到这一点。然后将新值替换为旧值。最后删除新的一个。这将导致ID=5的IDs Employee出现问题,根据数据库中临时保存的实例,下一个可能是7


我需要一个解决方案,在没有更多数据复制的情况下不应用更新。

我认为您正在寻找和其他类似的。@BurhanKhalid reversion将为管理员需要的任何回滚保存旧值。我需要的是不适用于真正的模型,直到管理员批准的变化。