Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django正在尝试使用现有主键保存对象_Django_Django Rest Framework - Fatal编程技术网

Django正在尝试使用现有主键保存对象

Django正在尝试使用现有主键保存对象,django,django-rest-framework,Django,Django Rest Framework,今天发生了一件奇怪的事。我在请求后从支付网关导入数据: for signature in response.json: Signature.objects.get_or_create(**signature) json示例: [ {'id': 1, 'plan': 1, 'customer': 1}, {'id': 31, 'plan': 12, 'customer': 22} {'id': 2, 'plan': 3, 'customer': 50}, {'id': 3

今天发生了一件奇怪的事。我在请求后从支付网关导入数据:

for signature in response.json:
    Signature.objects.get_or_create(**signature)
json示例:

[
  {'id': 1, 'plan': 1, 'customer': 1},
  {'id': 31, 'plan': 12, 'customer': 22}
  {'id': 2, 'plan': 3, 'customer': 50},
  {'id': 3111, 'plan': 12, 'customer': 22},
  {'id': 222, 'plan': 12, 'customer': 22},
]
是的,我的客户没有按照ID序列在支付服务上手动注册签名,因此,我正在导入并保留相同的pk

此代码按预期工作,数据现在与payment service导入的所有对象同步

现在奇怪的行为是:

我使用的是Django Rest框架,在API中经过后期检查验证的_数据后,这一行出现以下错误:

Signature.object.create(**self.validated_data)
重复的键值违反了唯一约束 计划\签名\密钥详细信息:密钥id=1已存在

验证数据:

{
   "plan": "3", # This is a foreign key to plan 3
   "payer_only": False,
   "schedule": "09:00",
   "payment_method: "CREDIT_CARD"
}
验证数据中没有“主键”:1或“id”:1

Django正在尝试使用现有密钥创建对象

调试代码时,我调用了Subscription.create行31次,然后:

重复的键值违反唯一约束计划\u签名\u pkey 详细信息:密钥id=1已存在

重复的键值违反唯一约束计划\u签名\u pkey 详细信息:密钥id=31已存在


在呼叫32时,这是有效的。那么,我是不是遗漏了什么?在我看来,这是一种奇怪的行为。

经过长时间的研究,我找到了解决办法。 我使用POSTGRES,Django使用PostgreSQL的串行数据类型来存储自动递增键。手动主键分配会停止pk自动递增。 解决方案:


使用此命令生成SQL,它将修复序列与其自动递增的字段数据不同步的情况。

经过长期研究,我找到了解决方案。 我使用POSTGRES,Django使用PostgreSQL的串行数据类型来存储自动递增键。手动主键分配会停止pk自动递增。 解决方案:


使用此命令生成SQL,它将修复序列与其自动递增的字段数据不同步的情况。

看起来您在数据库中重置了序列。很可能,如果您尝试在数据库中创建元素,它也不会立即工作,直到序列被更新多次以生成新的pk。这可能与数据库中的序列相关。我认为,如果您提供以下传统信息会有所帮助:您的数据库设置、完整的模型堆栈、序列化程序以及与存在问题的对象相关的视图。@WillemVanOnsem和AliAsgari,的确如此。我试图从支付服务中保留相同的pk,因为操作依赖于它。有什么建议吗?谢谢。看来你在数据库中重置了序列。很可能,如果您尝试在数据库中创建元素,它也不会立即工作,直到序列被更新多次以生成新的pk。这可能与数据库中的序列相关。我认为,如果您提供以下传统信息会有所帮助:您的数据库设置、完整的模型堆栈、序列化程序以及与存在问题的对象相关的视图。@WillemVanOnsem和AliAsgari,的确如此。我试图从支付服务中保留相同的pk,因为操作依赖于它。有什么建议吗?谢谢,这是事先准备好的。
$ django-admin sqlsequencereset app_label