Django更改外键数据并保存

时间:2016-04-05 09:22:31

标签: django orm foreign-key-relationship many-to-one

我有两个模型,如

class Reporter(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

class Article(models.Model):
    headline = models.CharField(max_length=100)
    pub_date = models.DateField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

现在,对于文章的对象,可以说

a=Article.objects.filter(id=1)
a=a[0]

我尝试更改撰写本文的作者的标题和电子邮件,以便我做

a.heagline = "Saving foreign key does not work"
a.reporter.email = "changed@email.com"
a.save()

这会保存Article对象,但不会修改Reporter。

我明确要做

a.reporter.save()

查看记者对象的更改。由于这是多对一关系,因此它还应该在保存时修改外键

如何通过调用childs save方法

来保存父模型

1 个答案:

答案 0 :(得分:2)

您可以覆盖保存方法或只创建自定义方法。

class Article(models.Model):

    ...

    # Overriding save
    def save(self, *args, **kwargs):
        self.reporter.save()
        super(Article, self).save(*args, **kwargs)

    # Creating a custom method 
    def save_related(self):
        self.reporter.save()
        self.save()

我建议你创建一个自定义方法,因为它不会在save()

中引入意外行为