问题描述
我是 Python 和 Django 的新手。由于文档,我创建了数据库。我测试了一下,两个模型之间的多对一关系出现了错误。
这对我来说看起来很奇怪,因为它就像这些类之间的一对一关系,但是如果我尝试添加很多,它会出错。还有其他类与多对一具有相同的关系。我以同样的方式创建,它们工作得很好。顺便说一下,我正在使用 sqlite。
class unites (models.Model):
id = models.IntegerField(primary_key=True)
unitename = models.CharField(max_length=128)
class intensivecare_forms (models.Model):
id = models.IntegerField(primary_key=True)
hospitals_id = models.ForeignKey(hospitals,on_delete=models.CASCADE)
formname = models.CharField(max_length=128)
data = models.JSONField()
unites_id = models.ForeignKey(unites,on_delete=models.CASCADE)
如果我尝试将第二种形式添加到 unites 中,则会出现此错误。
IntegrityError at /admin/LocalManager/intensivecare_forms/add/
UNIQUE constraint Failed: LocalManager_intensivecare_forms.unites_id_id
Request Method: POST
Request URL: http://localhost:8000/admin/LocalManager/intensivecare_forms/add/
Django Version: 3.2.4
Exception Type: IntegrityError
Exception Value:
UNIQUE constraint Failed: LocalManager_intensivecare_forms.unites_id_id
Exception Location: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py,line 423,in execute
Python Executable: /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
Python Version: 3.9.6
解决方法
unites_id
最初是一个 OneToOneField
。 OneToOneField
基本上是带有 ForeignKey
的 unique=True
,因此两个 intensivecare_forms
不能指向同一个 unites
。
后来你把它变成了ForeignKey
,但是忘记迁移数据库,所以UNIQUE
约束仍然由数据库强制执行。
通过makemigrations
和migrate
,通常可以去掉UNIQUE
约束,从而让两个intensivecare_forms
指向相同 {{ 1}}。