【问题标题】:Django Many-To-One IntegrityErrorDjango 多对一完整性错误
【发布时间】:2021-07-04 12:59:48
【问题描述】:

我是 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)

如果我尝试将第二种形式添加到单元中,则会出现此错误。

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_idOneToOneField 变成了 ForeignKey,但没有(完全)通过该迁移迁移数据库。
  • 你是对的。谢谢你。如果你愿意,可以写成答案。

标签: django django-models django-orm many-to-one


【解决方案1】:

unites_id 最初是 OneToOneFieldOneToOneField 基本上是 ForeignKeyunique=True,因此两个 intensivecare_forms 不能指向同一个 unites

后来你把它变成了ForeignKey,但是忘记迁移数据库,所以UNIQUE约束仍然被数据库强制执行。

通过makemigrationsmigrate,通常可以删除UNIQUE 约束,从而让两个intensivecare_forms 指向相同 unites

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 2013-03-18
    • 2015-06-17
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多