Opened 2 years ago

Last modified 21 months ago

#19193 new New feature

Save only one field to database which refereced to FieldFile

Reported by: 3dflex@… Owned by: nobody
Component: Database layer (models, ORM) Version: master
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 lrekucki)

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 (10)

comment:1 Changed 2 years ago by lrekucki

  • Description modified (diff)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Design 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 Changed 2 years ago 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 :)

comment:3 Changed 2 years ago by anonymous

  • Triage Stage changed from Design decision needed to Unreviewed
  • Version set to master

comment:4 Changed 2 years ago by anonymous

  • Version changed from master to 1.5-alpha-1

comment:5 Changed 2 years ago by akaariai

  • Triage Stage changed from Unreviewed to Design decision needed

comment:6 Changed 2 years ago by jacob

  • Resolution set to duplicate
  • Status changed from new to closed

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 Changed 2 years ago by 3dflex@…

  • Resolution duplicate deleted
  • Status changed from closed to new

comment:8 Changed 2 years ago by anonymous

  • Version changed from 1.5-alpha-1 to 1.5

comment:9 Changed 2 years ago by Alex

  • Triage Stage changed from Design decision needed to Accepted

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 Changed 21 months ago by anonymous

  • Keywords django 1.5 removed
  • Version changed from 1.5 to master

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

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