假设我正在为一个田径比赛建模。主键是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和track。现在,在结果中,我希望提供事件结果和温度。通常,这对于SQL连接来说是微不足道的。Django目前对复合键的支持还不是很多。如何使用单个自动递增主键对此用例进行建模,这将对Django更友好。
发布于 2013-05-21 08:31:28
使用unique_together
。这样,您可以在所有内容上使用递增的ids,但当将它们放在一起时,它们会形成一个唯一的键。
您可以在类的Meta类中定义unique_together
。
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-10-05 20:05:49
我会使用"Surrogate key",我不知道' django ',但不是重点,当一个日期因为恶劣的天气而改变时,你的数据库会出现问题(可能不是django框架),重点是永远不要使用可能改变属性作为(或在PK中)
https://stackoverflow.com/questions/16663483
复制相似问题