关于django.models中的多个关系?诺布在这里

时间:2012-01-26 19:27:32

标签: django django-models

这是我的models.py

from django.db import models

# Create your models here.

class Leagues(models.Model):
    LeagueName = models.CharField(max_length=200)

class Team(models.Model):
    TeamName = models.CharField(max_length=200)

class LeagueTable(models.Model):
    league = models.ForeignKey(Leagues)
    team = models.CharField(max_length=200)
    matches_played = models.IntegerField()
    matches_won = models.IntegerField()
    matches_drawn = models.IntegerField()
    matches_lost = models.IntegerField()
    points = models.IntegerField()

class FixtureTable(models.Model):
    league = models.ForeignKey(Leagues)
    fixture_date = models.DateField('Fixture Date')
    team_one = models.CharField(max_length=200)
    team_one_score = models.IntegerField()
    team_two = models.CharField(max_length=200)
    team_two_score = models.IntegerField()

在“类FixtureTable”中,我希望team_one和team_two链接到“class Team”模型中的两个不同团队。如何建立多重关系,或者是否可能。

PS:这纯粹是一个菜鸟,在编程方面有一点经验,但没有使用python或数据库的经验。

三江源。

1 个答案:

答案 0 :(得分:1)

您可以根据需要为同一模型创建任意数量的ForeignKeys。我怀疑是什么让你沮丧是Django给你一个错误,说你需要指定一个相关的名字。

默认情况下,Django在表单<model>_set的相反模型上创建一个属性。所以在以下场景中:

class FixtureTable(models.Model):
    team_one = models.ForeignKey(Team)

Django会将相关经理添加到Team fixturetable_set。如果你那么:

class FixtureTable(models.Model):
    team_one = models.ForeignKey(Team)
    team_two = models.ForeignKey(Team)

Django会尝试添加相同的属性两次,显然会失败。修复是指定related_name,因此每个人都可以拥有唯一的相关管理器:

class FixtureTable(models.Model):
    team_one = models.ForeignKey(Team, related_name='team_one_fixturetables')
    team_two = models.ForeignKey(Team, related_name='team_two_fixturetables')

然后,一切都会好起来的。您可以为related_name指定您喜欢的任何内容,只要它对于模型是唯一的。