我正在尝试在Django中制作类似wiki的页面。
我有两个模型Article
和ArticleRevision
。
如果我想要检索最新版本,我认为我需要在OneToOneField
中Article
引用ArticleRevision
。但是,如果我想查看文章的修订历史记录,我还需要ForeignKey
ArticleRevision
引用Article
。
这可能是正确的方法,但拥有多个外键并不是有点矫枉过正?我只能使用ArticleRevision中的ForeignKey(to=Article)
并使用Article
从articlerevision_set.latest()
获取最新修订版。但是,如果我要进行早期版本的回滚,将会导致麻烦。然后我可以使用BooleanField
中的ArticleRevision
来判断它是否是最新版本。
有没有人对此有任何想法?我真的想以最好和最有效的方式做到这一点。
答案 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