我有以下表格结构。
当我尝试迁移时,出现以下错误。
django.db.utils.OperationalError:表“certificate_light”有多个主键
但是,我发现其他堆栈溢出页面说在 RDBMS 中一个表可以有多个主键。
谁能知道我如何在 Django 中实现具有多个主键的表?
模型.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)
Run Code Online (Sandbox Code Playgroud)
更新
我添加了详细的错误消息,如下所示。
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
Run Code Online (Sandbox Code Playgroud)
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_together = (('certificate', 'zone'),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2516 次 |
| 最近记录: |