像Django模型的Wiki

时间:2014-10-29 10:02:00

标签: python django database django-models mediawiki

我正在尝试在Django中制作类似wiki的页面。

我有两个模型ArticleArticleRevision

如果我想要检索最新版本,我认为我需要在OneToOneFieldArticle引用ArticleRevision。但是,如果我想查看文章的修订历史记录,我还需要ForeignKey ArticleRevision引用Article

这可能是正确的方法,但拥有多个外键并不是有点矫枉过正?我只能使用ArticleRevision中的ForeignKey(to=Article)并使用Articlearticlerevision_set.latest()获取最新修订版。但是,如果我要进行早期版本的回滚,将会导致麻烦。然后我可以使用BooleanField中的ArticleRevision来判断它是否是最新版本。

有没有人对此有任何想法?我真的想以最好和最有效的方式做到这一点。

2 个答案:

答案 0 :(得分:1)

你应该看看django-revisions。它允许您完成所需的任务,而无需重新实现所有内容。

答案 1 :(得分:0)

ArticleRevision中的新字段如创建,如下所示:

class ArticleRevision(models.Model):
    # Your fields
    created = models.DateTimeField(auto_now_add=True, verbose_name=_(u'Creation Date'))

auto_now_add=True< - 这意味着在创建对象时将自动生成该字段


然后您可以在文章模型中添加一个新方法,如下所示:

class Article(models.Model):
    # Your fields...
    # I will assume you have a foreign key from ArticleReview to Article

    def get_latest_revision(self):
        if self.articlerevision_set.count() > 0:  # If there is revision
            last_revision = self.articlerevision_set.order_by('-created')[0]
            return last_revision
        else:
            return None

请注意:要执行此操作,您需要ForeignKey <{strong> ArticleRevision Article