django按一个字段搜索,然后在另一个字段上更新或创建

时间:2018-09-25 10:04:50

标签: python django

例如:

test_table

Field, Type, Null, Key, Default, Extra
'username', 'varchar(64)', 'NO', 'PRI', NULL, ''
'status', 'tinyint(1)', 'NO', '', NULL, ''

我想按用户名=“ john”进行搜索,如果存在,则将状态更新为1;

Django具有update_or_create函数,但在用户名和状态均存在的情况下有效;

例如 表中已有数据: username:john status:0

我想将状态更改为1

如果我使用update_or_create(),由于没有像“用户名:john,状态:1”这样的行,因此它将“创建”而不是“更新”状态为1:

TestTable.objects.update_or_create(username="John",status=1)

当然,您总是可以:首先搜索,然后搜索“如果...创建;否则...更新”。但是我不知道在使用update_or_create()时是否可以使用某些Django函数或没有注意到的东西。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试一下:

try:
    o = TestTable.objects.get(username='John')
    o.status = 1
    o.save(update_fields=["status"])
except TestTable.DoesNotExist:
    o = TestTable(username='John', status=1)