Django更改外键数据并保存 [英] Django change foreign key data and save

查看:1469
本文介绍了Django更改外键数据并保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两种型号

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)

现在让Article的对象说

Now for an object of Article lets say

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

我尝试更改写这篇文章的作者的标题和电子邮件,所以我这样做

I try to change the headline and the email of the author who has written this article so I do

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

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

This saves the Article object but does not modify the Reporter.

我明确必须要做

a.reporter.save()

查看对报告对象的更改.由于这是多对一关系,因此还应在保存时修改外键

to see the changes to the reporter object. As this is a Many to One relation it should also modify the Foreign key on saving

如何仅通过调用子级的save方法来保存父级模型

How can I save the parent Model too by just calling the childs save method

推荐答案

您可以覆盖save方法或仅创建自定义方法.

You could override the save method or just create a custom method.

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

I suggest you create a custom method because it doesn't introduce unexpected behavior in save()

这篇关于Django更改外键数据并保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆