显示未经编辑的模型数据版本

时间:2013-06-29 10:22:19

标签: database django duplicates

我有一个Entry模型如下:

class Entry(models.Model):
    date_posted = models.DateTimeField(auto_now_add=True)
    last_edited = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(CustomUser)
    title = models.CharField(max_length=150)
    description = models.TextField()
    tags = models.ManyToManyField(tags)

现在,只要用户创建或编辑Entry对象,我们就会将其发送到审核队列,并且该对象对Entry对象的默认管理器不可用,直到它被审核为止。当用户最初创建对象时,但当用户编辑条目对象时,它会从搜索结果中消失。我们还为用户提供保存或书签,不同的条目。所以编辑后的Entry对象在被保存的条目中不再可用,直到它被审核。

我要做的是让旧的Entry显示,直到编辑的Entry处于审核状态,一旦编辑的条目对象被审核,我们可以用原始条目替换已编辑的条目。

我能想到的一种方法是为用户制作的每个编辑创建一个不同的条目对象但是我不太确定这是否是一个可行且合理的方法来处理这种情况不会只是有很多数据库中的重复数据?

问题:

  1. 我的选择是什么? (我也想知道哪些是性能最好的)
  2. 有没有办法在不重复对象的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

在我看来,如果发送到审核队列的对象数量低至中等,您可以拥有ManyToMany(实际上是一对多是您想要的)字段,该字段保留对来自Entry对象的版本。

如果这不可行,您可以查看django-pickle-field,它允许您将任何对象类型存储到数据库中。因此,您可以创建一个额外的nullable列,在该列中,您可以按原样保存表单数据,并使其在审核队列中可用。

因此,审核队列的逻辑类似于:

MyObject.objects.filter(pickle_field__isnull=False)

主持人批准后,将字段数据覆盖到对象中。 否则,丢弃picklefield。

如果您想允许多次编辑或跟踪审核历史记录,您可以在中间表中为ManyToMany创建更多信息(例如,由其编辑,审核等)。