Django用两个外键保存两个模型

时间:2015-09-23 21:12:15

标签: django django-models foreign-keys

一篇文章只能有一个当前版本,但历史记录中可以有多个版本。每个版本都属于文章。

型号:

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个模型?

1 个答案:

答案 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()

这样就不那么容易混淆了。