2016-04-05 16 views
0

私は見出しと作者のメールアドレスを変更しようとDjangoは外部キーのデータを変更して保存し

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

言う条の目的に今

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.heagline = "Saving foreign key does not work" 
a.reporter.email = "[email protected]" 
a.save() 

これはArticleオブジェクトを保存しますが、Reporterは変更しません。

私は明示的にレポーターオブジェクトへの変更を確認するために

a.reporter.save() 

を行う必要があります。これはまた、私はちょうど方法

+0

で予期しない動作を導入していないので、私はあなたがカスタムメソッドを作成することをおすすめ

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

メソッド –

+0

を保存する直接的な方法がありますが、ありませんあなたの子モデルの 'save'メソッドを常にオーバーライドすることができます。 – Selcuk

+0

おそらく子供のsaveメソッドをオーバーライドしてこれを行うことはできますが、それは無駄であり、ある時点で問題が発生する可能性があります。 *なぜ*あなたはこれをしたいですか? – Sayse

答えて

1

を保存あなたは、保存メソッドをオーバーライドするか、単に作成することができチャイルズを呼び出すことによって、あまりにも親モデルを保存することができますどのように

の保存に外部キーを変更する必要があります一つの関係に多くあるのでカスタムメソッド。それは私がちょうどチャイルズを呼び出すことによって、あまりにも親モデルを保存することができますどのようにsave()

+0

これは、特定のユースケースのいくつかのために必要とされる可能性が最も高いもののための余分な作業を作成しました。 – Sayse

+0

@Sayseは完全に同意しています。そのため私は両方のアプローチを提示しました。 –

+0

私は実際の問題が何であるか分かりません。他の人のために働く1行余分なコードは何も買っていません。 – Sayse

関連する問題