一篇文章只能有一个当前版本,但历史记录中可以有多个版本。每个版本都属于文章。
型号:
class Article(models.Model):
published = models.BooleanField(default=False)
current_revision = models.ForeignKey('Revision', related_name='current_revision', blank=False, default=None)
class Revision(models.Model):
article = models.ForeignKey('Article', null=True)
title = models.CharField('Title', max_length=250, blank=False, default='(no title)')
content = RedactorField('Content')
created_at = models.DateTimeField('Created at', auto_now=True)
slug = models.SlugField('Slug', blank=False, null=True)
查看:
if article_form.is_valid() and revision_form.is_valid():
article = article_form.save(commit=False)
revision = revision_form.save()
article.current_revision = revision
article.save()
print(article)
revision.article = article
revision.save()
可以拨打save
3次吗?或者是否可以通过2次保存来保存2个模型?
答案 0 :(得分:1)
可以拨打save()
3次,但是,关于您的实施。
我认为,你的模型不是代表
一篇文章只能包含1个当前版本,但历史记录中可以有多个版本
为什么不只是,使用一个标志,知道修订是否是当前版本,更好地检查属性而不是在关系之间导航
class Article(models.Model):
published = models.BooleanField(default=False)
class Revision(models.Model):
article = models.ForeignKey('Article', null=True)
title = models.CharField('Title', max_length=250, blank=False, default='(no title)')
content = RedactorField('Content')
created_at = models.DateTimeField('Created at', auto_now=True)
slug = models.SlugField('Slug', blank=False, null=True)
current = models.BooleanField(default=True)
#In your views
if article_form.is_valid() and revision_form.is_valid():
article = article_form.save()
#set prior current revision flag to False
last_current_revision = article.revision_set.filter(current=True)
last_current_revision.update(current=False)
revision = revision_form.save()
revision.article = article
revision.save()
这样就不那么容易混淆了。