Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#10721 closed (invalid)

Django not update field when I use arrays[] for select object:

Reported by: moizes.m@… Owned by: nobody
Component: Database layer (models, ORM) Version: 1.0
Severity: Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description (last modified by kmtracey)

Django not update field when I use arrays[] for select object:

Itensvar = Itens.objects.all()
Itensvar[0].desc = 'Test'
Itensvar[0].save()

#django not execute update in database

Change History (3)

comment:1 Changed 6 years ago by anonymous

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 6 years ago by kmtracey

  • Description modified (diff)
  • Resolution set to invalid
  • Status changed from new to closed

Reformatted description -- please use preview to ensure your tickets are readable before submitting them.

Actually the Itensvar[0].save() will issue a database update, the problem is it will call save() on an newly-retrieved-from-the-database object, not the one you retrieved and change the desc on in the previous line. There is no caching done when you access a queryset by indexing like this. If you look at the doc here: http://docs.djangoproject.com/en/dev/topics/db/queries/#limiting-querysets and replace the indexing notation with what its rough equivalent is:

Itensvar[0:1].get().desc = 'Test'
Itensvar[0:1].get().save()

you can see the problem. The 2nd line isn't operating on the same object as the first one changed, it's calling save() on a new copy retrieved from the database. You need to write this as:

x = Itensvar[0]
x.desc = 'Test'
x.save()

comment:3 Changed 6 years ago by anonymous

Ok, it worked!!, thank's!

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