多对多的模型连接

时间:2017-08-01 08:46:41

标签: django django-models

所以我有以下模型:Session,Rider。

基本上我现在想要得到结果,其中骑手被放置在每个会话中,所以基本上它的M:N连接(每个骑手在很多会话中,每个会话都有很多车手)。

现在我应该制作像SessionResult这样的新模型吗?并从Session和Rider中放置两个外键并在此中间位置添加一个位置字段?或者你的建议是什么?

这是模特:

class Rider(models.Model):
    first_name = models.CharField(_('First name'), max_length=100, db_index=True)
    last_name = models.CharField(_('Last name'), max_length=100, db_index=True)
    number = models.IntegerField(_('Rider number'))
    team = models.ForeignKey(Team)
    country = CountryField()
    birthday = models.DateField(_('Birthday'))
    birth_place = models.CharField(_('Birth place'), max_length=100)
    weight = models.IntegerField(_('Weight'))
    height = models.IntegerField(_('Height'))
    info = models.TextField(_('Info'))

class Session(models.Model):
    title = models.CharField(_('Title'), max_length=100, db_index=True)
    event = models.ForeignKey(Event)
    start_date = models.DateTimeField(_('Start time'))
    end_date = models.DateTimeField(_('End time'))

这样的事情呢?

class SessionResult(models.Model):
    rider = models.ForeignKey(Rider)
    session = models.ForeignKey(Session)
    position = models.IntegerField()
    time = models.TimeField()

1 个答案:

答案 0 :(得分:3)

你的想法很棒,Django有一个特定的功能来处理它。 您可以使用ManyToManyField through属性

在你的情况下可能看起来像:

class Session(models.Model):
    ... other fields ...
    riders = models.ManyToManyField(
        Rider,
        through='SessionResult',
    )

使用您的SessionResult

如果对你更有意义,你可以将ManyToMany字段放在Rider模型而不是Session上。看看我链接的Django文档,它有非常有用的细节。