【发布时间】:2020-02-18 08:58:00
【问题描述】:
所以我在 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 admin 中创建 2 个重复条目,那么另一个系统将看到两个错误,例如
IntegrityError 重复键值违反唯一约束“my_model_pkey”详细信息:键 (id)=(1234) 已存在。
我正在使用 Django 1.11.15 和 PostgreSQL 9.5.15。
【问题讨论】:
-
你运行的是什么版本的 Django?请注意,随着版本号的增加,Django 放弃了对旧 PostgreSQL 版本的支持。请参阅docs.djangoproject.com/en/2.1/releases/2.1/… 或任何其他相关版本。
-
@GjertG 添加了使用的版本。
-
两个应用程序是否使用相同的版本?我假设“另一个系统”是指一个单独的 Django 应用程序?我的猜测是在指向正确的对象方面存在问题。
-
传递给函数的参数到底是什么?对 obj 参数最感兴趣。
-
本例中的“其他系统”只是直接的SQL插入语句。
save_model函数是 Django ModelAdmin 类中的一个被覆盖的函数 (docs)
标签: django postgresql django-admin