python - 当 PK 为 None 时,为什么 Django 在 INSERT 之前执行 UPDATE?
问题描述
我有一个带有 UUID 主键的模型:
id = models.UUIDField(
primary_key = True,
default = uuid.uuid4,
editable = False,
null = False,
blank = False,
help_text = 'The unique identifier of the Node.'
)
我要解决的问题是 Django似乎总是在插入之前尝试更新。
Django Docs似乎明确说明了行为应该是什么:如果pk
是,None
那么它将INSERT
首先尝试,否则将尝试UPDATE
.
当我创建一个 ModelInstance 时,它会自动填充id
一个 UUID,所以它不是没有。有没有办法让它不这样做?
无论如何,即使我设置id
并pk
创建None
,它仍然是UPDATE
第一个:
my_totally_new_node = Node(data = data, id = None, pk = None)
my_totally_new_node.id
> None
my_totally_new_node.pk
> None
reset_queries()
my_totally_new_node.save()
connection.queries
> [{'sql': 'UPDATE "connection_p...::uuid", 'time': '0.002'}, {'sql': 'INSERT INTO "connect...::bytea)", 'time': '0.001'}]
总结一下:
- 有没有办法可以使 ID 字段的默认行为不在创建时填充,但仍然在保存时填充?
- 任何想法为什么 Django 没有遵循记录的行为,
pk
并且None
仍在尝试INSERT
第一个?
我知道save(force_insert=True)
解决方法,但我正在寻找更好的方法,部分原因create
是不支持这种解决方法。
解决方案
推荐阅读
- android - 如何在 onTouch 方法中获取 GesturDetector.onSingleTapConfirmed() 返回值?
- jpa - JPA 垂头丧气:标准治疗与 JPQL 治疗
- vue.js - 本地副本更新时 vueJS-prop 正在发生变化
- javascript - Dojo 2 dojo2 中是否有渲染后的生命周期挂钩?
- c# - 签署一个xml元素c#
- bash - CLI - 如何选择具有特殊编码的文件或目录?
- javascript - 从父母的 onClick 在 reactjs 上更新状态子项
- malbolge - 如何在malbolge中打印用户输入?
- swift - 为什么数组(collCells)在快速传递来自不同 ViewController 的数组元素时显示为空?
- dialogflow-es - 如何在 DialogFlow java 客户端 v2 中设置上下文