我正在创建一个关于棒球运动员的网站以供学习。我很了解如何处理外键。这是我的模型:
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。提前致谢