Django+PostgreSQL中Block模型编辑保存触发唯一键冲突错误求助
解决方案
核心问题:save方法调用错误
你的Block模型的save方法中,调用父类save时错误传递了self参数,导致Django将更新操作误判为创建新对象,触发主键重复错误。
修复代码
修改Block模型的save方法:
def save(self, *args, **kwargs): self.name = self.name.capitalize() # 移除super().save中的self参数 return super().save(*args, **kwargs)
原因解释
Django模型的save是实例方法,调用父类的save时,Python会自动将当前实例绑定到方法上,不需要手动传递self。错误传递self后,super().save会把self当作第一个位置参数(对应force_insert参数),导致Django强制执行插入操作而非更新,从而触发主键重复的完整性错误。
额外验证
修复后,编辑保存Block实例时,Django会正确执行更新操作,不会再尝试插入已存在主键的记录。
内容的提问来源于stack exchange,提问作者Andras Vincze-Nagy
相关产品推荐
相关产品推荐

