django - Django中一张表可以有多个主键吗?
问题描述
我有以下表结构。
当我尝试迁移时,出现以下错误。
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)
更新
我添加了如下详细错误消息。
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
解决方案
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'),)
推荐阅读
- matlab - 给定长度的重叠窗口数
- javascript - React - 在创建时检查 PropTypes 而不是渲染时
- django - 添加新数据后丢失旧数据 Django Admin
- cmake - CMake 从不同的构建工具构建
- java - 应该用 insert="false" update="false" 映射
- excel - 将动态代码分配给多个按钮
- java - 从生成的 EditText 中获取文本
- android - Webview没有加载pdf url
- java - Commons IO (Apache) copyURLToFile 不工作
- python - Tkinter 多图形用户界面