python - Django更新MySQL数据库涉及外键的问题

标签 python mysql django lxml

大家早上好,

我有以下两个模型:

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/

相关文章:

python - PyDrive 上传和删除

python - 使用正则表达式查找包含特定表达式的句子

mysql - 使用 INNER JOIN 从一个表中获取所有字段?

django - Mod_wsgi工作进程段错误(11)

python - 在 django 和 unicode 中使用 python 登录时出现问题

python - 在 NetworkX 中绘制图形

python - 将 python 请求 session 存储在持久存储中

mysql - SQL查询未运行

MySQL:创建新用户/尝试访问数据库

当我运行 manage.py runserver 时,Python.exe 崩溃