【问题标题】:Wiki like Django modelsWiki 喜欢 Django 模型
【发布时间】:2014-10-29 10:02:00
【问题描述】:

我正在尝试在 Django 中创建一个类似 wiki 的页面。

我有两个型号ArticleArticleRevision

如果我想检索最新版本,我想我需要在 Article 中引用 ArticleRevisionOneToOneField。但如果我想查看一篇文章的修订历史,我还需要来自ArticleRevisionForeignKey 引用Article

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

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

【问题讨论】:

    标签: python django database django-models mediawiki


    【解决方案1】:

    你应该看看django-revisions。它允许您只做您需要的事情,而无需重新实现所有内容。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • @IronMan84 我同意,但我添加了包名称的链接。即使链接断开,包名称本身也应该保持稳定。
    【解决方案2】:

    ArticleRevision 中的一个新字段怎么样,比如 created,比如:

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

    auto_now_add=True


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

    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 from ArticleRevision to Article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2020-11-04
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多