首页 > 解决方案 > 字段删除时出现 IntegrityError 的原因?

问题描述

我有一个带有 Django 后端的 web 服务设置,我正在尝试删除我的 Field 对象的条目。每个字段都分配给一个用户,并且在该字段中完成了许多评估。评估通过外键链接到字段。删除 Field 对象后,我还想删除所有的评估Field,但保留用户。

我玩弄了这个on_deletion参数,如果我将它设置CASCADE为 Django 管理页面,如果我尝试删除 Field 对象,则会显示所有关联的评估对象。但是,我仍然收到以下错误:

IntegrityError at /admin/dfto/field/ update or delete on table "field" 违反了表 "assesment" 上的外键约束 "assessment_field_uuid_fkey" DETAIL: Key (uuid)=(f3a52c10-33be-42f9-995d-482025cea17b) 仍然被引用从表“评估”。

这些是我的参考模型:

class Assessment(models.Model):
    uuid = models.TextField(primary_key=True)
    longitude = models.FloatField(blank=True, null=True)
    latitude = models.FloatField(blank=True, null=True)
    field_uuid = models.ForeignKey('Field', models.CASCADE, db_column='field_uuid',blank=True, null=True, related_name='assessments')
    class Meta:
        db_table = 'assessment'

class Field(models.Model):
    uuid = models.TextField(primary_key=True)
    name = models.CharField(max_length=50, blank=True, null=True)
    country = models.CharField(max_length=50, blank=True, null=True)
    user_email = models.ForeignKey('User', models.DO_NOTHING, db_column='user_email')
    crop_uuid = models.ForeignKey(Crop, models.CASCADE, db_column='crop_uuid')

    class Meta:
        db_table = 'field'

有人可以向我解释为什么我会收到此错误和/或为我提供修复吗?

标签: pythondjango

解决方案


我认为这是因为 field_uuid 有参数“models.CASCADE”所以当你删除它时,django 也会尝试删除对这个特定键的任何引用,但不知道如何修复它。


推荐阅读