django - IntegrityError:重复键值违反唯一约束
问题描述
我在 django 应用程序中创建了一个模型,并将数据从 pgadmin 填充到表中,但是现在当我尝试从应用程序创建记录时,它会引发此完整性错误:
重复键值违反唯一约束“packsapp_foo_pkey”
详细信息:键 (id)=(4) 已存在。
这是models.py
class foo(models.Model):
a = models.CharField(max_length=500, default=0)
b = models.EmailField(max_length=500, default=0)
c = models.CharField(max_length=500, default=0)
d = models.CharField(max_length=500, default=0)
我是否总是需要从应用程序本身插入数据?
视图.py
class ProductFormView(CreateView):
model = Product
form_class = Productaddform
template_name = 'packsapp/employee/employeeProductForm.html'
def form_valid (self, form):
product = form.save(commit=False)
print("user ", self.request.user.id)
product.product_owner = Employee.objects.filter(user = self.request.user.id)[0]
product.save()
messages.success(self.request, 'The product was created with success! ')
return redirect('employee:products_table')
解决方案
同意 bruno 的评论,您的主键序列不同步。要解决此问题,请在 PG 控制台中运行以下命令:
SELECT setval(pg_get_serial_sequence('packsapp_foo', 'id'), max("id")) FROM "packsapp_foo";
要在数据库中手动输入值,请确保在插入时调用nextval(<sequence>)
-id
这将保持 pk 序列同步,例如:
INSERT INTO packsapp_foo
(id, a, b, c, d)
VALUES
(next_val(pg_get_serial_sequence('packsapp_foo', 'id')), ...);
这同样适用于您在表格列上可能拥有的任何其他序列。请参阅Postgres 文档以更新序列
推荐阅读
- python-3.x - Python中str类型的find()和index(),哪个时间复杂度更好?
- powershell - PowerShell:带有 PID 的 AppActivate 不起作用
- php - 将变量从 HTML 表单传递到 PHP
- javascript - 在 react/javascript 中修改一个 zip 文件
- python - 模块在 Django 中没有属性
- javascript - h1 元素文本没有使用 javascript 更改,但控制台中的更改
- python - Python 与 Spyder
- html - 我只想在我的 html 页面中插入图片?
- javascript - 有条件的 onclick 函数在没有点击的情况下触发?
- sql - SQL Server - 即使不满足条件,也会显示 LEFT 表中的所有行