簡體   English   中英

Django-如何鏈接表

[英]Django - How to link tables

您好,stackoverflow小組,

我有以下兩個Django表:

class StraightredFixture(models.Model):
    fixtureid = models.IntegerField(primary_key=True)
    soccerseason = models.IntegerField(db_column='soccerSeason')  # Field name made lowercase.
    hometeamid = models.IntegerField()
    awayteamid = models.IntegerField()
    fixturedate = models.DateTimeField()
    fixturestatus = models.CharField(max_length=24)
    fixturematchday = models.IntegerField()
    hometeamscore = models.IntegerField()
    awayteamscore = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'straightred_fixture'

class StraightredTeam(models.Model):
    teamid = models.IntegerField(primary_key=True)
    teamname = models.CharField(max_length=36)
    teamcode = models.CharField(max_length=5)
    teamshortname = models.CharField(max_length=24)

    class Meta:
        managed = False
        db_table = 'straightred_team'

在views.py中,我知道可以放置以下內容,並且可以正常運行:

def test(request):
    fixture = StraightredFixture.objects.get(fixtureid=136697)
    return render(request,'straightred/test.html',{'name':fixture.hometeamid})

如上所述,這一切都很好,但是我希望返回可在StraightredTeam模型中找到的hometeamid的團隊名稱。

經過一番環顧后,我被推向“ select_related”的方向,但是我不清楚如何在現有表中實現它,以及它是否是此類查詢的最有效方法。 感覺不錯。

請注意,此代碼是使用“ python manage.py inspectdb”創建的。

在此階段的任何建議將不勝感激。 非常感謝,艾倫。

我不確定Managed=False是否有意義,但是我想在Django中這樣做的明智方法是

home_team = models.ForeignKey('StraightRedFixture', db_column='fixtureid'))

然后只使用fixture.home_team而不是手動進行查詢。

請參閱模型關系

Django提供了特殊的模型字段來管理表關系。 滿足您需求的一個是ForeignKey

而不是聲明:

hometeamid = models.IntegerField()
awayteamid = models.IntegerField()

我猜這是python manage.py inspectdb的結果,您需要聲明:

home_team = models.ForeignKey('<app_name>. StraightredTeam', db_column='hometeamid', related_name='home_fixtures')
away_team = models.ForeignKey('<app_name>. StraightredTeam', db_column='awayteamid', related_name='away_fixtures')

通過執行此操作,您將告訴Django ORM處理內部關系,這將使您能夠執行以下操作:

fixture = StraightredFixture.objects.get(fixtureid=some_fixture_id)
fixture.home_team  # Returns the associated StraightredTeam instance.

team = StraightredTeam.objects.get(team_id=some_team_id)
team.home_fixtures.all()  # Return all at home fixtures for that team.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM