gpt4 book ai didi

Django admin save_model 没有在 Postgres 中推进主键

转载 作者:行者123 更新时间:2023-11-29 12:23:13 24 4
gpt4 key购买 nike

所以我在 Django 管理中有一个函数允许我在数据库中创建一个重复的 MyModel:

def save_model(self, request, obj, form, change):
if '_saveasnew' in request.POST:
old_obj_id = resolve(request.path).args[0]
old_obj = MyModel.objects.get(id=old_obj_id)
obj.other_id = old_obj.other_id
obj.status = old_obj.status
obj.project_id = old_obj.project_id
obj.test_url = old_obj.test_url
obj.save()
super(MyModelAdmin, self).save_model(request, obj, form, change)

这个创建工作正常,但我有另一个系统与这个数据库交互,每次调用这个函数时都会看到插入失败。例如,如果我以这种方式在 Django 管理中创建 2 个重复条目,那么另一个系统将看到两个错误,如

IntegrityError duplicate key value violates unique constraint "my_model_pkey" DETAIL: Key (id)=(1234) already exists.

我正在使用 Django 1.11.15 和 PostgreSQL 9.5.15。

最佳答案

我最好的猜测是你的代码在某个地方告诉你的数据库创建一个新的对象行并将该行的 ID 显式设置为 X。实际上代码应该告诉你的数据库创建一个新的对象行并隐式地将该行的 ID 设置为下一个可用整数。

您的代码令人困惑,因为您使用的方式非常复杂。为什么这个函数同时接受一个对象和一个请求?然后它从请求中找到旧对象?新对象是在哪里创建的?

一种更简单的方法是先检查您是否要另存为新文件。如果没有,则有一个更新对象并为其提供现有对象的函数。如果它是另存为新请求,则创建一个与现有对象具有相似值(ID 除外)的新对象行。然后使用更改更新该新对象。或者你的逻辑应该有效。在任何情况下,如果您考虑这些步骤的排序方式,就会有一种更直接的方法来完成您想要发生的步骤。

关于Django admin save_model 没有在 Postgres 中推进主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com