此覆盖保存方法的 Django IntegrityError
Posted
技术标签:
【中文标题】此覆盖保存方法的 Django IntegrityError【英文标题】:Django IntegrityError of this overriding save method 【发布时间】:2018-01-20 10:35:42 【问题描述】:我的模型
class Worksite(models.Model):
firm = models.ForeignKey('Firm', verbose_name='Firma', related_name="worksites", on_delete=models.CASCADE)
name = models.CharField(max_length=50, unique=True, verbose_name="Şantiye Adı")
我的保存方法
def save(self, *args, **kwargs):
if not self.slug:
self.slug = self.get_unique_slug()
os.mkdir(BASE_DIR+'/file/'+slugify(str(self.firm).replace('ı','i'))+'/'+self.slug)
return super(Worksite, self).save(self, *args, **kwargs)
我的更新视图
class WorksiteUpdateView(generic.edit.UpdateView):
template_name = 'firm/worksite_update.html'
model = Worksite
form_class = WorksiteForm
def get_success_url(self, *args, **kwargs):
return reverse('firm:worksite_list')
IntegrityError : (1062, "Duplicate entry '1' for key 'PRIMARY'")
如果保存方法被删除,则更新过程成功。但这一次无法创建文件夹。所以保存方法是必要的。但这个错误很烦人。 错误在哪里? 请帮忙。
【问题讨论】:
【参考方案1】:可能是您错误地调用了父母的方法吗?尝试return super(Worksite, self).save(*args, **kwargs)
(通过删除额外的self
参数)。
【讨论】:
【参考方案2】:这是因为你在调用超类方法时传递了self
参数-super().save()
。如果您删除它,它应该可以正常工作:
return super(Worksite, self).save( *args, **kwargs)
【讨论】:
以上是关于此覆盖保存方法的 Django IntegrityError的主要内容,如果未能解决你的问题,请参考以下文章