更新django模型对象的单个字段的简洁方法

gar*_*ois 10 django django-models

要更新(并保存)对象上的字段:

>>> product = Product.objects.get(name='Venezuelan Beaver Cheese')
>>> product.number_sold = 4
>>> product.save()
Run Code Online (Sandbox Code Playgroud)

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

product.update(number_sold=4)
Run Code Online (Sandbox Code Playgroud)

Ste*_*e K 26

对.

Product.objects.filter(name='Venezuelan Beaver Cheese').update(number_sold=4)
Run Code Online (Sandbox Code Playgroud)

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

product.name = "New name of the product"
product.save(update_fields=['name'])
Run Code Online (Sandbox Code Playgroud)

  • Django 1.5现在允许您使用update_fields参数https://docs.djangoproject.com/en/1.5/ref/models/instances/#specifying-which-fields-to-save仅更新save()上的一个字段 (2认同)

Chr*_*att 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()
Run Code Online (Sandbox Code Playgroud)