def save(self, name, content, save=True):
....
if save:
self.instance.save(update_fields=[self.field.name])
....
or:
def save(self, name, content, save=True, **kwargs)
....
if save:
self.instance.save(**kwargs)
....
So, we get rid of re-saving fields when updating
--
Ticket URL: <https://code.djangoproject.com/ticket/19193>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_docs: => 0
* stage: Unreviewed => Design decision needed
* needs_tests: => 0
* needs_better_patch: => 0
Old description:
> django.db.models.fields.FieldFile:
>
> def save(self, name, content, save=True):
> ....
> if save:
> self.instance.save(update_fields=[self.field.name])
> ....
>
> or:
>
> def save(self, name, content, save=True, **kwargs)
> ....
> if save:
> self.instance.save(**kwargs)
> ....
>
> So, we get rid of re-saving fields when updating
New description:
`django.db.models.fields.FieldFile`:
{{{
def save(self, name, content, save=True):
....
if save:
self.instance.save(update_fields=[self.field.name])
....
}}}
or:
{{{
def save(self, name, content, save=True, **kwargs)
....
if save:
self.instance.save(**kwargs)
....
}}}
So, we get rid of re-saving fields when updating
--
Comment:
Option 1 is highly backwards incompatible and option 2 looks like an API
bloat - passing `save=False` and calling `instance.save()` does exactly
the same and avoids potential kwargs naming conflict.
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:1>
Comment (by 3dflex@…):
This is useful when you need to update the field contains id in the
name(path), which can be obtained after the save. Now we can do:
{{{
def get_files_path(instance, filename):
return os.path.join('files', str(instance.id), filename)
class MyFile(models.Model):
...
file = models.FileField(upload_to=get_files_path)
}}}
{{{
model.save()
model.file.save(content.name, content)
}}}
The second query repeatedly update all fields, which is not acceptable
when the data and fields to save is more.
Sorry for my English :)
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:2>
* version: => master
* stage: Design decision needed => Unreviewed
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:3>
* version: master => 1.5-alpha-1
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:4>
* stage: Unreviewed => Design decision needed
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:5>
* status: new => closed
* resolution: => duplicate
Comment:
This ticket's effectively obsoleted by `update_fields` in Django 1.5
(https://docs.djangoproject.com/en/dev/ref/models/instances/#specifying-
which-fields-to-save).
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:6>
* status: closed => new
* resolution: duplicate =>
Comment:
There is no such option in FieldFile.save
(https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.fields.files.FieldFile.save)
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:7>
* version: 1.5-alpha-1 => 1.5
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:8>
* stage: Design decision needed => Accepted
Comment:
Marking as accepted, the ability to not save all the things makes sense.
Not sure if it should be the default or an option yet.
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:9>
* keywords: django 1.5 =>
* version: 1.5 => master
Comment:
As the expected release of Django 1.6, can we see this feature in it?
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:10>
* status: new => closed
* resolution: => duplicate
Comment:
The reason this was originally closed is because you can do this:
{{{
obj.file.save(content.name, content, save=False)
obj.save(update_fields=['file'])
}}}
This seems acceptable to me.
--
Ticket URL: <https://code.djangoproject.com/ticket/19193#comment:11>