0

我有一个入口模型如下:

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编辑的条目对象被审核后,我们可以用原始条目替换已编辑的条目。

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

问题:

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

1 回答 1

1

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

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

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

MyObject.objects.filter(pickle_field__isnull=False)

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

如果您想允许多次编辑或跟踪审核历史记录,您可以在中间表中将其设置为包含更多信息(例如编辑者、审核者等)的 ManyToMany。

于 2013-06-29T12:12:08.077 回答