一個一對一的關係我想模型在Django與修訂的文章:如何單程模型在Django
我有以下在我的文章的models.py:
class Article(models.Model):
title = models.CharField(blank=False, max_length=80)
slug = models.SlugField(max_length=80)
def __unicode__(self):
return self.title
class ArticleRevision(models.Model):
article = models.ForeignKey(Article)
revision_nr = models.PositiveSmallIntegerField(blank=True, null=True)
body = models.TextField(blank=False)
在artlcle模型我希望對修訂有2個直接引用 - 一個將指向已發佈的修訂,另一個指向正在積極編輯的修訂。然而,據我所知,OneToOne和ForeignKey引用在模型引用的另一側生成反向引用,所以我的問題是,我如何在Django中創建單向一對一引用?
是否有一些特殊的咒語呢,還是我不得不通過將狀態包含到要求在特定狀態下進行修訂的字段的修訂和自定義實現中來僞造它?
編輯:我想,我在解釋我的意圖方面做得有點糟糕。讓我們試試更高的抽象層次:
我最初的目的是實現一種修訂版的文章模型,其中每篇文章可能有多個修訂版,其中一個修訂版可能是「發佈」和一個主動編輯。
這意味着,文章將有一個一對多的關係,修訂和從文章修改兩個單向引用(通過ForeignKey(Article)
參考ArticleRevision類來表示):published_revision
和。
我的問題主要是,我怎樣才能用Django的ORM建模。
並非真正的答案,但已經有一些Django模型版本的解決方案,例如, django-reversion(http://code.google.com/p/django-reversion)或AuditTrail(http://code.djangoproject.com/wiki/AuditTrail)。也許其中一個適合你的需求,你不必重新發明輪子:-) – 2009-07-13 19:51:29
我不想自動版本化我的模型(這是這兩個)。我正在尋找更多的是「手動」修訂,其中文章修訂是一篇文章,直到它發佈。對已發佈文章的任何編輯都會創建一個新版本。發佈新版本會鎖定這個版本,並將其設置爲已發佈的版本,並且對文章的下一次編輯將重新重複編輯發佈週期(我個人認爲這對於普通用戶來說更容易管理,而不是「每個編輯都是修訂版」 「方法)。 – 2011-02-07 11:24:35