Django如果行已存在,则更新该行

2024-10-02 00:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个模特说

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中存在,也就是说,更改列'a'的值,其中abc\u id=1、2或3,如果这个abc\u id不存在,那么创建一个新行。你知道吗


Tags: iddefaultmodelmodels模式lengthmaxclass
1条回答
网友
1楼 · 发布于 2024-10-02 00:32:10

使用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()

相关问题 更多 >

    热门问题