我使用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 = {}
现在,我确信这个类与db没有任何关系,并且db不知道它的存在 - 但是现在当我尝试使用这个命令删除一些产品记录时:
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"
在这一点上,我完全迷失了,并且混淆了h ***是什么表格" my_app_product" - 它为什么存在? 我去了PostgreSQL,发现这个表确实存在。 我想了解它是如何工作的以及我在这种情况下如何删除记录。 哦,还有一个细节 - 当我尝试通过django admin删除我的记录时,我设法做到没有任何问题。
感谢善意的帮助。
答案 0 :(得分:0)
以下是您实际执行的操作:https://docs.djangoproject.com/en/1.11/topics/db/models/#multi-table-inheritance
对模型进行子类化(未定义为抽象)将创建一个名为Product的新表,该表具有到ProductModel pk的OneToOneField,即product_upc
。您正在尝试删除具有Product表引用的ProductModel,这就是您收到错误的原因。
根据您使用该产品类的方式,我建议您只需将其超类更改为object
并运行makemigrations
即可删除该表,因为您实际上并不需要它。