0

假设我正在为一项田径比赛建模。主键是 date、track 和 race_no。

class Event(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    temperature = models.IntegerField()

class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()   

现在假设我希望为用户提供一个表单来查找特定事件。他们将输入日期、race_no 和赛道。现在在结果中,我希望提供事件结果以及温度。通常这对于 SQL JOIN 来说是微不足道的。Django 目前对复合键的支持不多。如何使用单个自动递增主键对这个用例进行建模,这对 Django 更加友好。

4

2 回答 2

2

使用unique_together. 这样,您可以在所有内容上增加 id,但是当它们放在一起时,它们会形成一个唯一的键。

unique_together在类的 Meta 类中定义。

class Race(models.Model):
    date = models.DateField()
    race_no = models.IntegerField()     
    track = models.CharField(max_length = 4)
    athlete_id = models.ForeignKey(Athlete)
    finishing_pos = models.IntegerField()

    class Meta:
        unique_together = ("date", "race_no", "track")
于 2013-05-21T08:31:27.750 回答
0

我会使用 “代理键”,我不知道“django”,但不是重点,当日期由于恶劣天气而改变时,您的数据库会出现问题(可能不是 django 框架),重点是永远不要将可能更改的属性用作(或在 PK 中)

于 2013-10-05T20:05:49.057 回答