1

私は学習目的で野球選手に関するウェブサイトを作成しています。外部キーの扱い方は在庫があります。これが私のモデルです:

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と表示されます。前もって感謝します

4

1 に答える 1

0

プレーヤーを簡単に選択できるようにフォームを作成する必要があります。手動で行ったのと同じように追加したい場合は、難しいでしょう。

forms.py

class StatForm(forms.ModelForm):
    class Meta:
        model = Stat

    def __init__(self, user, *args, **kwargs):
        super(StatForm, self).__init__(*args, **kwargs)
        self.fields['player_id'].queryset = Player_Bios.objects.filter()

views.py

def add_stat(request):
    if request.method == 'POST':
        form = StatForm(request.POST)
        if form.is_valid():
            form.save() 
return render(request, 'add_stat.html', {
    'form': StatForm(),
}) 

add_stat.html

<form method="post">{% csrf_token %}
    {% for field in form %}
        {{field}}<br/>
    {% endfor %}
    <input type="submit" value="Save Stat">
</form>
于 2013-01-28T06:04:28.677 に答える