【发布时间】:2009-07-13 19:11:54
【问题描述】:
我想在 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 中创建单向一对一引用?
是否有一些特殊的咒语,或者我必须通过将状态包含在修订中来伪造它,以及要求在特定状态下进行修订的字段的自定义实现?
编辑:我想,我在解释我的意图方面做得有些差。让我们在更高的抽象级别上尝试一下:
我最初的意图是实现一种修订文章模型,其中每篇文章可能有多个修订,其中一个修订可能已“发布”,而另一个修订可能会被积极编辑。
这意味着文章将与修订具有一对多的关系(由 ArticleRevision 类中的ForeignKey(Article) 引用表示)和从文章到修订的两个单向引用:@ 987654325@ 和 edited_revision.
我的问题主要是,如何使用 Django 的 ORM 进行建模。
【问题讨论】:
-
不是一个真正的答案,但已经有几个用于版本控制 Django 模型的解决方案,例如django-reversion (code.google.com/p/django-reversion) 或 AuditTrail (code.djangoproject.com/wiki/AuditTrail)。也许其中之一适合您的需求,您不必重新发明轮子:-)
-
我不想对我的模型进行自动版本控制(这就是这两个所做的)。我正在寻找更多的是“手动”修订,其中文章修订是一篇文章,直到它被发布。对已发表文章的任何编辑都会创建一个新修订。发布新修订版将锁定此修订版并将其设置为已发布修订版,并且文章的下一次编辑将重新重复编辑-发布周期(我个人认为,对于普通用户来说,这比“每次编辑都是修订版”更易于管理" 方法)。
标签: python django django-models