0

いくつかのクラスと外部キーを持つモデルを作成し、データベースに保存できました。

私は次のモデルを持っています:

class Player_Bios(models.Model):
  my_id            = models.SlugField(unique=True)
  player_id        = models.IntegerField(max_length=50, unique=True)    
  name             = models.CharField(max_length=50) 
  last             = models.CharField(max_length=50)
  middle           = models.CharField(max_length=50, blank=True)

class BatStat (models.Model):
  player_id           = models.ForeignKey('Player_Bios')
  team_id             = models.ForeignKey('Team')
  bat_stat_id         = models.CharField(max_length=50, unique=True)
  sport_code           = models.CharField(max_length=50, blank=True) 
  ab                  = models.IntegerField(max_length=50, null=True)

class Team (models.Model):

  team_id             = models.IntegerField(max_length=50, unique=True)
  team_short          = models.CharField(max_length=50, blank=True)
  team_full           = models.CharField(max_length=50, blank=True)

データベースに保存すると、Team テーブルの team_id が BatStat テーブルの team_id と同じであることがわかりますが、BatStat の player_id は Player_Bios テーブルの player_id とは異なります。これは、データをデータベースに保存する方法です。

p_id = Player_Bios.objects.get(player_id=st['player_id'])
t_id = Team.objects.get(team_id=st['team_id']) #I get the team_id from the Team Class
bat_id = str(st['season'])+ str(st['team_seq'])
bat_id = str(p_id.player_id) + bat_id
c = BatStat(player_id = p_id,team_id=t_id, bat_stat_id=bat_id, sport_code =st["sport_code"],ab=st['ab'])
c.save()

st['player_id'] は辞書です。印刷したところ、正しい player_id 番号が表示されました

4

1 に答える 1

0

BatStat では、player_id ではない Player_Bios へのキーを保存しています。

class Player_Bios(models.Model):
  ...
  player_id        = models.IntegerField(max_length=50, unique=True)  

class BatStat (models.Model):
  ...
  player_id           = models.ForeignKey('Player_Bios')

team_id が同じ理由はわかりませんが、既に ID を取得しているようです。ID を直接設定することで、Player_Bios と Team の検索を回避できます。

Django:整数を使用して外部キーを設定しますか?

class Player_Bios(models.Model):
  ...
  player_id = models.IntegerField(primary_key=True, max_length=50)  

class Team (models.Model):
  ...
  team_id = models.IntegerField(primary_key=True, max_length=50)

class BatStat (models.Model):
  ...
  player = models.ForeignKey('Player_Bios') # notice i renamed this to not have '_id'
  team = models.ForeignKey('Team') # notice i renamed this to not have '_id'

c = BatStat(bat_stat_id=bat_id, 
            sport_code =st["sport_code"],
            ab=st['ab'])
c.player_id = st['player_id'], # notice that this has '_id'
c.team_id = st['team_id'], # notice this has '_id'
c.save()
于 2013-01-30T03:45:26.370 に答える