Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新django模型对象的单个字段的简洁方法_Django_Django Models - Fatal编程技术网

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

更新django模型对象的单个字段的简洁方法,django,django-models,Django,Django Models,要更新(并保存)对象上的字段,请执行以下操作: >>> product = Product.objects.get(name='Venezuelan Beaver Cheese') >>> product.number_sold = 4 >>> product.save() 有没有办法将最后两行压缩为一行,如: product.update(number_sold=4) 是的 如果您有一个已更改的模型实例,并且只想将特定字段保存到数据库中

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

>>> product = Product.objects.get(name='Venezuelan Beaver Cheese')
>>> product.number_sold = 4
>>> product.save()
有没有办法将最后两行压缩为一行,如:

product.update(number_sold=4)
是的

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

product.name = "New name of the product"
product.save(update_fields=['name'])

@Lovelive的答案是最好的选择。唯一的缺点是,您无法使用它获得实例。因此,如果您还需要
product
,那么您仍然需要
product=product.objects.get(…)
行。然而,它确实完美地涵盖了“将最后两行压缩为一行”的用例场景

为了扮演魔鬼代言人的角色,您还可以向模型中添加一个方法:

class Product(models.Model):
    ...
    def update(self, **kwargs):
        for k, v in kwargs.iteritems():
            setattr(self, k, v)
        self.save()

根据情况,这也是一种备选方案:

product.save(update_fields=["number_sold"])

链接到文档:(不要被标题愚弄,你可以选择一行,这样只更新一行)。Django 1.5现在允许你在保存()时只更新一个字段,改为使用update_fields参数@rschwieb Updated my answer。这保存了number_sell字段。但它要求您事先已经修改了对象的编号和售出价值。问题是你是否可以在一行中同时完成这两件事我有
AttributeError:“dict”对象在这个方法上没有属性“iteritems”
product.save(update_fields=["number_sold"])