# Model contains only one JSON field
class TestModel(models.Model):
field = JSONField(default=dict)
# Dictionary, assigned to model.field
field_json = {"test": 5}
model = TestModel(field = field_json)
model.save()
# Returns true. WHY???
print(id(model.field) == id(field_json))
保存模型后,模型不应该从db刷新吗?为什么模型字段保留了对原始字典对象的可变引用?
保存一个模型后,模型不应该从db刷新吗?
不,它 暮气沉沉. 它只是使 CREATE
或 INSERT INTO
语句在数据库中。所以这里会是这样的。
INSERT INTO appname_test_model (field) VALUES ('{"test": 5}');
就是这样,对象保持不变。事实上,如果你有一个例如 DecimalField
并给它分配一个 int
但它仍将是一个 int
.
如果主键是一个 AutoField
(或 BigAutoField
),它也会在第一次保存对象时设置该对象的主键。
如同在 保存对象 文件部分:
要将对象保存回数据库,请调用
save()
.(…)
模型保存过程也有一些微妙的地方,请看下面的章节。
自动递增主键
如果一个模型有一个
AutoField
- 自动递增的主键--那么这个 自动增加的值将被计算并保存为一个属性。 在你的对象上第一次调用save()
.