python - django.db.utils.IntegrityError : update or delete on table when deleting a record 错误

标签 python mysql django postgresql

我使用 django 和 postgress,但有一个非常奇怪的异常。 我有一个名为 ProductModel 的模型对象(upc 作为 unique_id)。 这是模型的样子:

class ProductModel(models.Model):

def __str__(self):
    return self.clean_name + " " + str(self.product_upc)

product_name = models.CharField(max_length=300, blank=True)
product_upc = models.CharField(max_length=300, primary_key=True)
official_price = models.DecimalField(default=0, decimal_places=5, max_digits=10)
mrsp = models.DecimalField(default=0, decimal_places=5, max_digits=10)
last_seen = models.DateTimeField(default=now)
clean_name = models.CharField(max_length=200, default='')

不幸的是(正如我现在所理解的那样)在开始的时候我犯了一个错误并创建了一个名为 product 的类,它继承了 ProductModel - 这个类有一些常规的方法,没什么特别的。

class Product(ProductModel):
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.create_clean_name()
    self.img_list = []
    self.scraped_content = ""
    self.specs = {}

现在,我确定这个类与数据库无关,数据库也不知道它的存在 - 但现在当我尝试使用此命令删除一些产品记录时:

p = ProductModel.objects.all().filter(last_seen__month__lt=4,product_name__contains='a')
    p.delete()

我收到以下错误 -

django.db.utils.IntegrityError: update or delete on table "my_app_productmodel" violates foreign key constraint "f64b7bfb6c6019a35bf6b81e4125240f" on table "my_app_product"
        DETAIL:  Key (product_upc)=(852896336240) is still referenced from table "my_app_product"

在这一点上,我完全迷路了,搞不清楚表“my_app_product”到底是什么——它为什么存在?? 我去了我的 PostgreSQL,发现这个表确实存在。 我想了解它是如何工作的以及在这种情况下我如何删除记录。 哦,还有一个细节 - 当我尝试通过 django admin 删除我的记录时,我成功地做到了这一点。

感谢好心的 helper 。

最佳答案

这是您实际执行的操作:https://docs.djangoproject.com/en/1.11/topics/db/models/#multi-table-inheritance

子类化模型(未定义为抽象模型)将创建一个名为 Product 的新表,该表具有一个 OneToOneField 到 ProductModel pk,即 product_upc。您正在尝试删除引用了 Product 表的 ProductModel,这就是您收到错误的原因。

根据您使用 Product 类的方式,我建议将其父类(super class)更改为 object 并运行 makemigrations 以删除表,因为您实际上并不需要它.

关于python - django.db.utils.IntegrityError : update or delete on table when deleting a record 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43712890/

相关文章:

python - 从 python 读取 stdout 生成 XML

php - 存储 ~50,000,000 个值的最佳数据库是什么?

python - Django 表单集 - 空 kwargs

python - 使用关键字参数 'ques_detail' 反转 '{' pk' : '' }' not found. 1 pattern(s) tried: [' ques_detail/(? P<pk>[0-9]+)/$']

ios - Django 在上传后旋转 iphone 图片

python - urllib2.URL错误: urlopen error no host given

python - python 2.5 是否具有与 Tcl 的 uplevel 命令等效的功能?

python - 在 Python 中抓取表格时,返回一个空表格

mysql - 如何从 mysql 获取 DateTime 并将其设置为 json 格式以供 highcharts 使用

python - 将带有嵌套 SELECT、EXIST、SELECT NEXT 子句的 mysql 转换为 python sqlalchemy 语句