我是一个模特: -
class XYZ(models.Model):
unique_col = models.CharField(max_length=255)
total = models.IntegerField()
我想更新总数,unique_col
值+10
。所以,我做了以下几点: -
try:
obj = XYZ.objects.get(unique_col='unique_value')
obj.total +=10
except:
obj = XYZ(unique_col='unique_value', total=10)
finally:
obj.save()
在这种情况下,如何使用total
将+10
更新为之前值update_or_create
?
答案 0 :(得分:4)
问题是,在total
需要创建对象的情况下,您不知道update_or_create
的值。如果指定默认值
class XYZ(models.Model):
unique_col = models.CharField(max_length=255)
total = models.IntegerField(default=0)
然后你可以运行get_or_create并在之后进行更新。
obj = XYZ.objects.get_or_create(unique_col='unique_value')
obj.total += 10
obj.save()
当然,如果您真的想使用它,则不使用update_or_create方法,但它至少可以让您不需要try / except,如果这是您希望避免的那样
答案 1 :(得分:1)
2020年的最新答案: 罗伯特答案的概念是正确的,但我必须通过以下方式对其进行修改才能为我工作:
将总计默认设置为零:
class XYZ(models.Model):
...
total = models.IntegerField(default=0)
不仅将obj, created
设置为obj
obj, created = XYZ.objects.get_or_create(unique_col='unique_value')
obj.total += 10
obj.save()
请参见https://docs.djangoproject.com/en/3.0/ref/models/querysets/#get-or-create