【问题标题】:Reason for IntegrityError on Field deletion?字段删除时出现 IntegrityError 的原因?
【发布时间】:2019-04-15 09:47:59
【问题描述】:

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

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

IntegrityError at /admin/dfto/field/ 更新或删除表“字段” 违反表上的外键约束“assessment_field_uuid_fkey” “评估”细节:关键 (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'

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

【问题讨论】:

  • CASCADE 此选项会影响 row 删除。不是列。
  • 是的,我知道。我不是在谈论列意义上的“字段”。我的模型恰好也被称为“字段”。
  • 改成CASCADE后有没有应用迁移?
  • 感谢您的提示。我刚才做了。很遗憾没有解决问题。
  • 您正试图从 django 管理员中删除,对吗?是否有什么东西阻止管理员删除 Assesment 实例?

标签: python django


【解决方案1】:

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

【讨论】:

  • 但这正是我想要的。我要删除所有已删除的引用!
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2011-02-02
  • 2011-10-22
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多