django:删除引用为ManyToManyField的模型

时间:2012-05-30 21:45:27

标签: django django-models django-admin

我有一个模特:

class picture(models.Model):
    name = models.CharField(null=False, blank=False, max_length=128)
    collections = models.ManyToManyField('collection', null=False, blank=False)
    sizes = models.ManyToManyField('picture_size', null=False, blank=False)
    papers = models.ManyToManyField('picture_paper', null=False, blank=False)
    base_price = models.DecimalField(decimal_places=2, null=False, blank=False, default=2000, max_digits=10)
    img_icon = models.FileField(blank=False, null=False, upload_to='pic_icons')
    img_large = models.FileField(blank=False, null=False, upload_to='pic_large')
    img_huge = models.FileField(blank=False, null=False, upload_to='pic_huge')
    is_active = models.BooleanField(blank=False, null=False, default=True)

和picture_paper:

class picture_paper(models.Model):
    name = models.CharField(null=False, blank=False, max_length=128)
    price_per_ssm = models.DecimalField(null=False, blank=False, decimal_places=2, max_digits=10)
    is_active = models.BooleanField(null=False, blank=False, default=True)

我在管理员中注册他们的模型,可以创建picture_paper但不能删除它:

  

(1054,'where子句'中的“未知栏'picture_paper_id'”)

它正在构建的SQL是:

'DELETE FROM `core_picture_papers` WHERE `picture_paper_id` IN (%s)'

解释core_picture_papers:

id  int(11) NO  PRI     auto_increment
picture_id  int(11) NO  MUL     
paper_id    int(11) NO  MUL 

我的模型设置是完全错误的(我正在尝试构建一个纸种类的字典并将它们挂钩到图片 - 图片可以与几个尺寸或一个等相关)?或者有些东西我不见了?

1 个答案:

答案 0 :(得分:0)

我想说您正在尝试删除与现有picture_paper对象相关的picture对象。由于您的M2M不能为空或空白,因此当您尝试删除它时会出现错误。

查看关于on_delete参数的Django文档。您可能需要将其设置为PROTECTED并正确处理异常。