私は学習目的で野球選手に関するウェブサイトを作成しています。外部キーの扱い方は在庫があります。これが私のモデルです:
class Player_Bios(models.Model):
mlb_id = models.SlugField(unique=True)
name = models.CharField(max_length=50)
last = models.CharField(max_length=50)
middle = models.CharField(max_length=50, blank=True)
jersey = models.CharField(max_length=5)
def __unicode__(self):
return self.mlb_id
class Stat (models.Model):
player_id = models.ForeignKey('Player_Bios')
year = models.IntegerField(max_length=50)
h = models.IntegerField(max_length=50)
2h = models.IntegerField(max_length=50)
def __unicode__(self):
return self.stat_id
プレーヤーの統計を取得することはできますが、データベースに保存するにはどうすればよいですか?
私がやりたいことの例。私は自分のウェブサイトに入れたいすべてのプレーヤーを集めて保存し、彼らのすべての経歴を保存することができました。私に必要なのは、プレイヤーのキャリア統計だけです。
from player_bios.models import *
year = "2012" # I use variable in this example because I don't want to put all my code
h = 180 #But think that I have this info
2h = 30
st= Stat(player_id=, year=year,h=h,2h=2h) #I don't know what to use on player id because that's the foreign key
st. save
更新:
データをデータベースに保存する際にまだ問題があります。これが私のコードです:
from django.core.management.base import BaseCommand, CommandError
from player_bios.models import *
import urllib2
import json
import string
import re
DR_ID = [u'430947', u'499864', u'405395']
stint = ["player_id","sport_code","ab","league_full","bb","ops","hr","season","ao","team_id",
"go","cs","league_short","avg","go_ao","sport_id","team_full","league","sport","gidp",
"d","g","team_abbrev","league_id","h","ibb","team_seq","sf","sac","team_short","r","so",
"t","rbi","sb","slg","tb","hbp","obp"]
st = {}
class Command(BaseCommand):
for i in DR_ID:
url = ("http://mlb.mlb.com/lookup/json/named.sport_hitting_composed.bam?game_type='R'&sport_code='mlb'&sport_code='aaa'&sport_code='aax'&sport_code='afa'&sport_code='afx'&sport_code='asx'&sport_code='rok'&sort_by='season_asc'&player_id="+i+"&sport_hitting_composed.season=2013")
res = urllib2.urlopen(url)
data = json.load(res)
numberofseasons = data['sport_hitting_composed']['sport_hitting_tm']['queryResults']['totalSize']
numberofseasons= int(numberofseasons)
row = 0
while row < numberofseasons:
for x in stint:
data2 = data['sport_hitting_composed']['sport_hitting_tm']['queryResults']['row'][row][x]
st[x]=data2
row +=1
p_id = p=Player_Bios.objects.get(mlb_id=i)
p_id_st=str(p_id)
bat_id = (st['season']+st["team_id"])
bat_id = p_id_st + bat_id
c = BatStat(player_id_id= p_id.mlb_id,bat_stat_id=bat_id, sport_code = st["sport_code"],ab=st['ab'],league_full=st['league_full'],bb=st['bb'],ops=st['ops'],hr=st['hr'],season=st['season'],ao=st['ao'],
team_id=st['team_id'],go=st['go'],cs=st['cs'],league_short=st['league_short'],avg=st['avg'],go_ao=st['go_ao'],sport_id=st['sport_id'],team_full=st['team_full'],
league=st['league'],sport=st['sport'],gidp=st['gidp'],d=st['d'],g=st['g'],team_abbrev=st['team_abbrev'],league_id=st['team_id'],h=st['h'],ibb=st['ibb'],
team_seq=st['team_seq'],sf=st['sf'],sac=st['sac'],team_short=st['team_short'],r=st['r'],so=st['so'],t=st['t'],rbi=st['rbi'],sb=st['sb'],slg=st['slg'],tb=st['tb'],
hbp=st['hbp'],obp=st['obp'])
c.save()
次のエラーが発生します。
django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`player_bios_info`.`player_bios_batstat`, CONSTRAINT `player_id_id_refs_id_ee2da61` FOREIGN KEY (`player_id_id`) REFERENCES `player_bios_player_bios` (`id`))')
モデルにはplayer_idがありますが、データベースではplayer_id_idと表示されます。前もって感謝します