大家早上好,
我有以下两个模型:
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class StraightredTeam(models.Model):
teamid = models.IntegerField(primary_key=True)
teamname = models.CharField(max_length=36)
country = models.CharField(max_length=36,null=True)
stadium = models.CharField(max_length=36,null=True)
homepageurl = models.CharField(max_length=36,null=True)
wikilink = models.CharField(max_length=36,null=True)
teamcode = models.CharField(max_length=5,null=True)
teamshortname = models.CharField(max_length=24,null=True)
currentteam = models.PositiveSmallIntegerField(null=True)
def natural_key(self):
return self.teamname
class Meta:
managed = True
db_table = 'straightred_team'
class StraightredFixture(models.Model):
fixtureid = models.IntegerField(primary_key=True)
home_team = models.ForeignKey('straightred.StraightredTeam', db_column='hometeamid', related_name='home_fixtures')
away_team = models.ForeignKey('straightred.StraightredTeam', db_column='awayteamid', related_name='away_fixtures')
fixturedate = models.DateTimeField(null=True)
fixturestatus = models.CharField(max_length=24,null=True)
fixturematchday = models.IntegerField(null=True)
spectators = models.IntegerField(null=True)
hometeamscore = models.IntegerField(null=True)
awayteamscore = models.IntegerField(null=True)
homegoaldetails = models.TextField(null=True)
awaygoaldetails = models.TextField(null=True)
hometeamyellowcarddetails = models.TextField(null=True)
awayteamyellowcarddetails = models.TextField(null=True)
class Meta:
managed = True
db_table = 'straightred_fixture'
以下 View 完美运行:
@csrf_exempt
def updateteams(request):
if request.user.is_authenticated():
xmlsoccer = XmlSoccer(api_key='XYZ', use_demo=True)
teams = xmlsoccer.call_api(method='GetAllTeams')
numberOfTeamsUpdated = 0
for team in teams:
if 'Team_Id' in team.keys():
teamUpdate = StraightredTeam(teamid=team['Team_Id'],teamname=team['Name'],stadium=team['Stadium'])
teamUpdate.save()
numberOfTeamsUpdated = numberOfTeamsUpdated + 1
return HttpResponse(str(numberOfTeamsUpdated) + " team/s have been added/updated.")
else:
return HttpResponse("You must be logged in to update teams.")
但是,以下 View 不起作用:
@csrf_exempt
def updatefixtures(request):
if request.user.is_authenticated():
xmlsoccer = XmlSoccer(api_key='XYZ', use_demo=True)
fixtures = xmlsoccer.call_api(method='GetFixturesByLeagueAndSeason',
seasonDateString='1516',
league='Scottish Premier League')
numberOfFixturesUpdated = 0
for fixture in fixtures:
if 'Id' in fixture.keys():
fixtureUpdate = StraightredFixture(fixtureid=fixture['Id'],away_team=fixture['AwayTeam_Id'],home_team=fixture['HomeTeam_Id'])
fixtureUpdate.save()
numberOfFixturesUpdated = numberOfFixturesUpdated + 1
return HttpResponse(str(numberOfFixturesUpdated) + " fixture/s have been added/updated.")
else:
return HttpResponse("You must be logged in to update teams.")
当我尝试调用它时,出现以下错误:
Cannot assign "'54'": "StraightredFixture.home_team" must be a "StraightredTeam" instance.
54 id 需要输入的正确 teamid。 54肯定在straightred_fixture表的teamdid中。
我认为这与外键有关,因为任何非外键的东西似乎都能完美工作。我确信我在某个地方有一个简单的语法问题。
非常感谢您提供的任何帮助,艾伦。
最佳答案
您可能是从某个较旧的 Django 版本升级的?
如果是这样,请注意,现在在分配外键时,必须分配外来对象的已保存实例。如果您只想按 id 分配,请使用 <fieldname>_id
我相信,在这里,
fixtureUpdate = StraightredFixture(
fixtureid=fixture['Id'],
away_team_id=fixture['AwayTeam_Id'],
home_team_id=fixture['HomeTeam_Id']
)
...应该可以解决问题。
关于python - Django更新MySQL数据库涉及外键的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036844/