#33841: Django shouldn't fail (bulk-)update silently when QuerySet is already
evaluated / update documentation
-------------------------------------+-------------------------------------
               Reporter:  SHxKM      |          Owner:  nobody
                   Type:             |         Status:  new
  Uncategorized                      |
              Component:  Database   |        Version:  3.2
  layer (models, ORM)                |       Keywords:  update, bulk-
               Severity:  Normal     |  update, queryset
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 The following code:

 {{{
 initial_queryset = MyObject.objects.filter(...)
 filtered_queryset = initial_queryset.exclude(related_model__id__in=...)
 for_loop_on_filtered = [MyOtherModel(some_id=..., other_id=...) for x in
                           filtered_queryset]
 MyOtherModel.objects.bulk_create(for_loop_on_filtered)
 filtered_queryset.update(processed=True) # silent failure to update
 }}}

 Fails to update all objects in `filtered_queryset`. It seems like the
 reason is the list-comprehension on `filtered_queryset`.
 I've been with Django for >6 years and this is by far the most surprising
 behavior I've seen.

 It does seem to be documented (?):

 "You cannot call update() on a QuerySet that has had a slice taken or can
 otherwise no longer be filtered."

 But the fact is I can and did call `update()` on that QuerySet, and Django
 returned 0 errors.

 If that is the intended behavior, then I suggest updating the
 documentation.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33841>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070181f4769eb1-d1b3d6ad-7088-474f-819f-7f3c78416758-000000%40eu-central-1.amazonses.com.

Reply via email to