当前位置: 首页 > 知识库问答 >
问题:

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

郗唯
2023-03-14

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

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

示例:

[
  {'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。

此代码按预期工作,数据现在与支付服务同步(所有导入的对象)。

现在奇怪的行为:

我正在使用Django Rest框架,在API中的POST(check validated_data)之后,在这一行出现以下错误:

Signature.object.create(**self.validated_data)

重复键值违反唯一约束"plans_signature_pkey"DETAIL: Key(id)=(1)已经存在。

验证数据:

{
   "plan": "3", # This is a foreign key to plan 3
   "payer_only": False,
   "schedule": "09:00",
   "payment_method: "CREDIT_CARD"
}

在已验证的数据中没有“PK”:1或“id”:1

Django试图用一个现有的键创建一个对象?

调试代码时,我调用了订阅。create()行31次,然后:

重复键值违反唯一约束"plans_signature_pkey"DETAIL: Key(id)=(1)已经存在。

....

重复键值违反唯一约束"plans_signature_pkey"DETAIL: Key(id)=(31)已经存在。

在呼叫32中,这是有效的。我错过了什么吗?在我看来这是一种奇怪的行为。

共有1个答案

仰经武
2023-03-14

经过长时间的研究,我找到了解决方案。我正在使用后格里斯,而詹戈使用后格雷SQL的串行数据类型来存储自动增量键。手动主键分配将停止 pk 自动递增。解决方案:sqlsequencereset

$ django-admin sqlsequencereset app_label

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

 类似资料:
  • 我有两个具有@ManyToOne关系的实体类,如下所示。 我是Spring Data JPA的新手,所以这可能是一个非常基本的错误。

  • 我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂

  • 问题内容: 我刚开始使用Django REST框架,但是在保存外键时遇到了麻烦。我有一个模特和一个model。的Phone外键为。向发出请求时,我想为Phone请求中提供的数字创建对象。但是,当我提供电话号码时,会出现以下错误 我只希望它创建Phone对象本身。这是我正在使用的模型: 这是我正在使用它们的视图和序列化器 这是我的请求正文: 这是回应: 400错误的要求 问题答案: 该由Django

  • 我有以下实体: 我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义。第二个参数应该表示ID。但是没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?

  • 当我试图保存我的Android游戏(通过Android模拟器在我的Windows笔记本电脑上播放),我得到一个。我花了几个小时尝试不同的东西,但仍然感到困惑,因为代码完全适用于我以前的版本,而不是Android系统。

  • 我想在一个外键中保存多个关系对象,但不幸的是,我在下面附加了一个错误。我的数据库中已经有ID为189的对象 错误: views.py 序列化程序。派克 模型。派克