首页 > 解决方案 > 在将关系添加到 django 中的数据库之前添加关系

问题描述

如果我在 django 有这样的关系

class Reporter(models.Model):  
    pass

class Article(models.Model):
    reporter = models.ForeignKey(Reporter)

我想立即创建一个带有文章的新记者,我首先必须save()将记者添加到数据库,然后才能添加文章。

但有时,我想准备一切“离线”(在某种意义上,在将任何东西推送到数据库之前),比如创建一个 Reporter 对象,向其中添加文章,然后可能仍然修改 Reporter 对象的某些属性。

然后,当一切都完成后,我想把所有东西都推到数据库中。但是当然,当我Reporter.article_set.add()在调用之前使用时,Reporter.save()我会得到一个错误,因为 django 会尝试自动将文章和外键添加到数据库中。有什么办法可以防止这种情况,并准备我的对象,包括“离线”关系?

我自己的方法是,添加一个set_articles方法Reporter,然后覆盖该save()方法,以便检查是否设置了任何文章并在保存后添加它们Reporter

但在我开始即兴创作之前,我想知道 django 中是否已经有任何解决方案

标签: djangodjango-modelsforeign-keys

解决方案


save()方法接受一个可选的commit关键字参数,该参数接受TrueFalse。如果您调用save()with commit=False,那么它将返回一个尚未保存到数据库的对象。在这种情况下,您可以调用save()生成的模型实例。


推荐阅读