我具有以下表格结构。
当我尝试迁移时,出现以下错误。
django.db.utils.OperationalError:表“ certificate_light”具有更多功能 比一个主键
但是,我发现其他stack overflow page表示一个表在RDBMS中可以具有多个主键。
谁能知道我如何在Django中实现具有多个主键的表?
models.py
class Certificate(models.Model):
name=models.CharField(max_length=20)
class Zone(models.Model):
zone=models.CharField(max_length=20)
conditioned=models.BooleanField(default=True)
class Light(models.Model):
certificate=models.ForeignKey(Certificate, on_delete=models.CASCADE,related_name='certificate')
zone=models.ForeignKey(Zone, on_delete=models.CASCADE,related_name='lightzone')
lpd=models.IntegerField()
sensor=models.BooleanField(default=True)
更新
我添加了如下的详细错误消息。
Applying certificate.0007_auto_20181126_1155...Traceback (most recent call last):
File "C:\Users\obakatsu\Anaconda3\envs\webEP\lib\site-packages\django\db\backends\utils.py", line 63, in execute
return self.cursor.execute(sql)
File "C:\Users\obakatsu\Anaconda3\envs\webEP\lib\site-packages\django\db\backends\sqlite3\base.py", line 326, in execute
return Database.Cursor.execute(self, query)
sqlite3.OperationalError: table "certificate_light" has more than one primary key
答案 0 :(得分:2)
Django不完全支持多个主键。相反,您可以使用unique_togather。例如:
class Light(models.Model):
certificate=models.ForeignKey(Certificate, on_delete=models.CASCADE,related_name='certificate')
zone=models.ForeignKey(Zone, on_delete=models.CASCADE,related_name='lightzone')
lpd=models.IntegerField()
sensor=models.BooleanField(default=True)
class Meta:
unique_togather = (('certificate', 'zone'),)
答案 1 :(得分:1)
您可以在模型中使用多个OneToOne字段以及默认主键id
。 OneToOne字段也像主键一样“表现”,即多行不能相同。最重要的是,您可以使用unique_together
来组合这两个唯一字段。