Django 更改外键数据并保存
Django change foreign key data and save
我有两个模型
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)
现在对于 object 的文章来说
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()
这会保存文章 object 但不会修改 Reporter。
我明确必须做
a.reporter.save()
查看报告者的变化object。由于这是多对一关系,它还应该在保存时修改外键
如何仅通过调用孩子的保存方法来保存 parent 模型
您可以覆盖保存方法或只创建一个自定义方法。
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()
中引入意外行为
我有两个模型
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)
现在对于 object 的文章来说
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()
这会保存文章 object 但不会修改 Reporter。
我明确必须做
a.reporter.save()
查看报告者的变化object。由于这是多对一关系,它还应该在保存时修改外键
如何仅通过调用孩子的保存方法来保存 parent 模型
您可以覆盖保存方法或只创建一个自定义方法。
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()