日々の記録

学習時の備忘録や思いついた事をダラダラ記載

DjangoでDBリレーションを実装するときのコーディング

Djangoを学習していて引っかかった部分をまとめた。

 

マスターファイルと累積データファイルのリレーションを実装したい時は、[models.py]を下記の様に記述する。

 

マスターファイル

  1. # 武器の第一レジェンダリー効果マスタ
  2. class m_wp_status1(models.Model):
  3.     
  4.     StatusNo = models.IntegerField(db_column='StatusNo', unique=True, primary_key=True)
  5.     Status = models.CharField(db_column='Status', max_length=50)
  6.  
  7.     class Meta:
  8.         db_table = 'm_wp_status1'
  9.         db_table_comment = '武器の第一レジェンダリー効果マスタ'
  10.  
  11.     def __str__(self):
  12.         return self.Status
  13.  

 

 [StatusNo]を主キーとする為に、[primary_key=True]を記述。

 

累積データファイル

 

  1. # 所持している遠距離武器データ
  2. class d_wp_long(models.Model):
  3.  
  4.     DataNo = models.IntegerField(db_column='DataNo', unique=True, primary_key=True)
  5.     WeaponNo = models.IntegerField(db_column='WeaponNo', default=1)
  6.     st1_Status = models.ForeignKey(m_wp_status1, to_field='StatusNo', on_delete=models.PROTECT)
  7.  
  8.     class Meta:
  9.         db_table = 'd_wp_long'
  10.         db_table_comment = '所持している遠距離武器データ'

 

 [st1_Status]をマスターファイルの[Status]と紐づけする為に、 [ForeignKey]で紐づけする。この時大事なのは、[to_field='StatusNo']の所で紐づけする為のキーを指定する事。

 

Djangoの場合、主キー([primary_key=True])を指定しない場合、自動で[id]という列名の主キーが作成されるらしいのだが、既存のDBを利用したい場合には困る。

なので、明示的に主キーを宣言する必要がある。