2016-05-20 5 views
0

を持つデータベース内の各フィールドを更新するのは、私は2つのテーブルがあるとしましょう:ジャンゴ - この値

テーブル#1:スペース

enter image description here

テーブル#2:学生

enter image description here

if私はprom_nameフォームテーブル#1を変更したい、私は自動的にテーブル#2のprom_nameを更新したいと思う。

私のモデル学生は学生が名前とprom_code(given) prom_codeは、レジスタが新規であるので、

私があれば、元の1つは、すでに検証し、登録

class Space(model.Models): 
    prom_name = models.CharField(max_length = 20) 
    prom_code = models.CharField(max_length = 20, Default=RANDOM, editable=FALSE) 

    def save(self): 
     try: 
      From my_other_app.models import Students 
      myobj = Students.object.get(prom_code = self.prom_code) 
      myobj.prom_name = self.prom_name 
      myobj.save() 
     except Students.DoesNotExist: 
     super(Space, self).save() 

これは私が何をしようとしているのは単純な例ですが拒否その後、存在しません。私のテーブルの中のすべてのprom_code = self.prom_code(私が変更しているもの)からすべてのprom_namesを変更する方法を取得できません学生

forサイクルを使用する必要がありますか?

よろしく、

+0

両方のテーブルに 'Prom_code'と' Prom_name'があります。あなたのデータベース/モデルが正規化されていないようです。データベースを正規化する場合、各テーブルの 'Prom_name'を更新する必要はありません。 –

答えて

1

あなたのデザインが2nd normal formに準拠していないです。 Prom_nameは、テーブルSpaceにのみ存在し、Studentsには存在しません。これは、冗長フィールドを格納すると追加のディスクスペースが追加され、今説明したようなメンテナンス作業が増えるためです。

テーブルからProm_nameカラムを削除して、Spaceテーブルで名前を取得する必要がある場合は参加してください。

+0

私のprom_codeはユニークなので、あなたは正しいです、私は私の値を持っている私のprom_nameを呼び出すことができますまたは変更しないでください、ありがとうたくさん、私の間違い – BrianCas

1

あなたは、このような方法で、(モデルを変更することで)データベースを正規化することができます:

テーブル#1:スペース

Prom_code | Prom_name 
789    Prom1 
800    Prom5 
471    Prom3 

テーブル#2:学生

Name | ID | Prom_code 
John   1   789 
Martha  2   789 
Ramsy  3   800 
Bob   4   471 
Debbys  5   789 

学生テーブルを参照Prom_codeスペーステーブルを参照しています。

+0

私の友人をありがとう、私はちょうどデータベース設計 – BrianCas