On 03/01/2012 09:46 PM, Tai Lee wrote: > This is easy to achieve in your own code. Create your own BaseModel > class that all your models subclass. Instead of using > `.filter().update()`, do this: > > def update(self, **kwargs): > """ > Updates the fields specified in `kwargs` and then call `save()`. > """ > if kwargs: > for k, v in kwargs.iteritems(): > setattr(self, k, v) > self.save(force_update=True) > > This will still fire the `save` signals, and your model instance will > have the new values as well as having them saved to the database. > > I think it is also easier than assigning values to each field and then > calling `.save(only_fields[field1, field2])`, which I don't think is > any better than filter().update(). If `save(only_fields=...)` were to > only write specified fields to the database, this might cause > unexpected side effects with `save` signals?
The "only_fields" kwarg suggestion comes from ticket 4102, and it is primarily intended as a performance optimization for large models by only sending the values of certain fields to the database at all, something that your proposed code does not do. Carl
signature.asc
Description: OpenPGP digital signature