gpt4 book ai didi

django - Django 和 Postgres 违反外键约束

转载 作者:行者123 更新时间:2023-11-29 12:26:46 25 4
gpt4 key购买 nike

当我尝试填充数据时,我在 Django 1.7 中的两个模型之间遇到了外键约束冲突。

第一个模型是Specialty,一个简单的名称占位符,看起来像这样:

class Specialty(MongoidModel):
name = models.CharField(max_length=100)

引用它的模型 Job 看起来像这样:

class Job(MongoidModel):
specialty = models.ForeignKey(
Specialty,
null=True,
blank=True
)

这两个都继承了 MongoidModel,它只是一个包含 id、created_at 日期和 updated_at 日期的自定义模型,用于从原始 Mongo 数据库中移植数据。

Makemigrations 和 migrate 一样运行良好,但是当我实际尝试导入所有 Job 对象时,我立即收到此错误:

django.db.utils.IntegrityError: insert or update on table "jobs_job" 
violates foreign key constraint "D76699ba021e613d02bad10e8fb41f69"
DETAIL: Key (specialty_id)=(None) is not present in table
"specializations_specialty".

查看导致崩溃的具体工作会发现它包含一个无专业,因为许多工作没有专业。

据我了解,数据库正在尝试查找 ID 为 None 的特殊对象,但失败了。我认为这就是 ForeignKey 定义中的 blank=True 和 null=True 应该优雅地避免的情况,不让它达到那个状态,而只是让关联撒谎?

最佳答案

如果尝试通过覆盖模型或管理保存方法保存相关模型,可能会收到类似的错误。在没有看到完整模型或管理代码的情况下,这只是在黑暗中尝试,但 django-modelcluster 可能会提供您需要的级联保存结构。

django-modelcluster introduces a new type of relation, ParentalKey, where the related models are stored locally to the ‘parent’ model until the parent is explicitly saved.

要使用它,请导入 ParentalKey 模型字段类型并像 FK 一样使用它。

from modelcluster.fields import ParentalKey

class Job(MongoidModel):
specialty = ParentalKey(
Specialty,
null=True,
blank=True
)

可能存在约束“D76699ba021e613d02bad10e8fb41f69”是由 Mongo 库通过错误创建的。没有将 MongoDB 用于 Django 项目我没有太多细节,但是通过 Mongo 本身你可以从数据库中删除约束“D76699ba021e613d02bad10e8fb41f69”。据我所知,由于 Mongo 不使用传统的 fk,因此我假设约束是一个简单的 not-null 并删除它会解决它。

关于django - Django 和 Postgres 违反外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com