我正在尝试根据"请求"来建立一个crud应用程序。用户必须创建请求才能创建/编辑/删除。我会描述一个像这样的简单例子
class Employee(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
dob = models.DateField()
# etc.
现在我想通过添加名为" Approved"的两个字段来控制员工的创建。和"批准的"。
现在编辑的问题。我想用OLD和NEW值创建一个请求。当管理员批准然后将新值应用于实例时,否则从系统中删除新值。
到目前为止,对我来说最好的解决方案是使用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)
这适用于我的创建和删除请求。但是,更新请求必须临时保存新值。除了创建新模型(例如员工)并将新值放入其中之外,我无法找到方法。然后将新值中的值替换为旧值。最后删除新的。这将导致ID为员工ID = 5的问题,下一个可能是7,基于"数据库中的临时保存实例"
我需要一个解决方案,在没有更多数据复制的情况下不应用更新。