假设我正在为田径比赛建模。主键是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更友好。
答案 0 :(得分:2)
使用unique_together
。
通过这种方式,您可以对所有内容进行递增ID,但是当它们放在一起时,它们会形成一个唯一的密钥。
您在类'Meta class'中定义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")
答案 1 :(得分:0)
我会使用"Surrogate key",我不知道'django',但不是重点,因为恶劣天气导致日期发生变化,您的数据库会出现问题(不会使用django框架) ,关键是永远不要使用可能改变属性(或在PK内)