15

要更新(并保存)对象上的字段,请执行以下操作:

>>> product = Product.objects.get(name='Venezuelan Beaver Cheese')
>>> product.number_sold = 4
>>> product.save()

有没有办法将最后两行压缩成一行,例如:

product.update(number_sold=4)
4

3 回答 3

30

是的。

Product.objects.filter(name='Venezuelan Beaver Cheese').update(number_sold=4)

如果您更改了模型实例并且只想将特定字段保存到数据库中,请执行以下操作:

product.name = "New name of the product"
product.save(update_fields=['name'])
于 2012-05-11T19:50:25.307 回答
7

@Lovelive 的回答是最好的方法。唯一的缺点是你没有得到实例。product = Product.objects.get(...)因此,如果您需要product其他任何东西,您仍然需要这条线。但是,它确实完美地涵盖了“将最后两行压缩为一行”的用例场景。

只是为了扮演魔鬼的拥护者,您还可以在模型中添加一个方法:

class Product(models.Model):
    ...
    def update(self, **kwargs):
        for k, v in kwargs.iteritems():
            setattr(self, k, v)
        self.save()
于 2012-05-11T21:13:23.343 回答
1

根据情况,这也是一种替代方法:

product.save(update_fields=["number_sold"])
于 2017-04-29T07:09:20.520 回答