【发布时间】:2021-07-18 20:28:16
【问题描述】:
我可以使用Model(**dictionary) 创建一个新的 django 模型对象,但如果我想以相同的方式更新一个实例,我发现只有 update_or_create 存在问题并且经常返回“重复 PK”错误。在模型对象上调用自定义辅助函数似乎也不是特别pythonic。或者,您可以使用以下模式:
Model.objects.get(id=id).update(**dict)
或
model.__dict__.update(**dict)
model.save()
后者感觉像是一个 hack,我读了几次,它不“应该”以这种方式完成。第一种方法需要查询调用,并且再次感觉不正确,因为模型实例可能已经实例化并且要更新它,我们需要再次向数据库发送查询?
我还读到“您可以使用表单来执行此操作” - 但并不总是用户在更新数据库中的模型,我们可能会编写各种需要更新模型的函数。我想知道,是否有以下代码不可能/实现的原因?模型对象不能以这种方式直接调用和更新是否有原因?
model_instance(**dict)
model_instance.save()
【问题讨论】: