Opened 11 years ago

Closed 8 years ago

#19193 closed New feature (duplicate)

Save only one field to database which refereced to FieldFile

Reported by: 3dflex@… Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Łukasz Rekucki)

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

Change History (11)

comment:1 by Łukasz Rekucki, 11 years ago

Description: modified (diff)
Triage Stage: UnreviewedDesign decision needed

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.

comment:2 by 3dflex@…, 11 years ago

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 :)

comment:3 by anonymous, 11 years ago

Triage Stage: Design decision neededUnreviewed
Version: master

comment:4 by anonymous, 11 years ago

Version: master1.5-alpha-1

comment:5 by Anssi Kääriäinen, 11 years ago

Triage Stage: UnreviewedDesign decision needed

comment:6 by Jacob, 11 years ago

Resolution: duplicate
Status: newclosed

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).

comment:7 by 3dflex@…, 11 years ago

Resolution: duplicate
Status: closednew

comment:8 by anonymous, 11 years ago

Version: 1.5-alpha-11.5

comment:9 by Alex Gaynor, 11 years ago

Triage Stage: Design decision neededAccepted

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.

comment:10 by anonymous, 11 years ago

Keywords: django 1.5 removed
Version: 1.5master

As the expected release of Django 1.6, can we see this feature in it?

comment:11 by Tim Graham, 8 years ago

Resolution: duplicate
Status: newclosed

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.

Note: See TracTickets for help on using tickets.
Back to Top