#21584: prefetch_related child queryset does not update on create
-------------------------------------+-------------------------------------
     Reporter:  lucaswiman           |                    Owner:  nobody
         Type:  Uncategorized        |                   Status:  closed
    Component:  Database layer       |                  Version:  1.6
  (models, ORM)                      |               Resolution:  invalid
     Severity:  Normal               |             Triage Stage:
     Keywords:                       |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by lukeplant):

 Sorry, that's just how the ORM works. Objects that represent collections
 do not keep track of their elements, because they represent querysets i.e.
 queries that may or may not yet have been evaluated, not actual
 collections of objects. If you have:

 {{{
 #!python
     my_objects = Foo.objects.all().filter(bar=1)
     list(my_objects) # evaluate query
     my_objects.update(bar=2)
 }}}

 then you will find that the 'update' has not affected anything in
 `my_objects` - either by changing the instances, or by removing them from
 the collection (since they no longer match the requirement `bar=1`).

 In the same way, `p.child_set` does not keep track of elements that are
 referred to. When you call `all()`, it executes a query every time,
 (rather than tracking creates/adds/deletes etc.). If you have used
 `prefetch_related`, however, it never executes a query when you just do
 `all()` because it has been prefetched. This is exactly what
 `prefetch_related` is supposed to do - the `all()` will not return data to
 reflect what is in the DB at that moment in time, but what was in the DB
 when the query was first evaluated.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/21584#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/068.0ef5524914886e6eba90bc7203940889%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to