python - 如果行存在,Django 更新行
问题描述
我有一个模特说,
class ABC(models.Model):
x = models.CharFeild(max_length=100)
y = model.IntegerFeild(default=1)
另一个模型是,
class XYZ(models.Model):
a = models.CharFeild(max_length=100)
abc = model.ForeignKey(ABC, db_index=True)
我现有的数据库看起来像,
ABC
id x y
1 a 10
2 b 20
3 c 30
. . .
. . .
XYZ
id a abc_id
1 x 1
2 y 2
3 z 3
. . .
. . .
所以现在我想更新该字段,如果它存在于模型 XYZ 中,即更改 abc_id=1 或 2 或 3 的列“a”值,如果该 abc_id 不存在,则创建一个新行。
解决方案
update_or_create()
QuerySet的使用方法
new_value = {"a": "new value"}
XYZ.objects.update_or_create(abc_id=1,defaults=new_value)
注意:我不确定是否可以使用该方法
添加逻辑或条件update_or_create()
更新
这也可以通过,
defaults = {"a": "new value"}
try:
obj = XYZ.objects.get(abc_id=1)
for key, value in defaults.items():
setattr(obj, key, value)
obj.save()
except XYZ.DoesNotExist:
new_values = {"abc_id": 1}
new_values.update(defaults)
obj = XYZ(**new_values)
obj.save()
推荐阅读
- sqlite - 在 SQLite 中启用类型检查
- c++ - C++ 调用 Scilab 引擎:Tcl 初始化失败
- r - 从 tera 术语转换讨厌的时间格式
- c++ - 输入验证无限循环 C++
- jquery - Laravel 时间戳返回 [object object] 使用 eloquent
- batch-file - 使用批处理从 .txt 文件中删除空行和空格
- python - 大学服务器上的 Abaqus 脚本
- android - Android 仪器测试 - 使用 OkHttp MockServer.useHttps(...) 时出现 SSLHandshakeException
- xamarin.forms - 将标签放置在框架内时,标签内容的运行时更改无法正确调整视图大小?
- c++ - 在 C++ 中,什么是 wx.h?