#34378: Using in_bulk() with id_list and order_by()
-------------------------------------+-------------------------------------
               Reporter:  Ekaterina  |          Owner:  nobody
  Vakhrusheva                        |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  4.1
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:  ib_bulk
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 If you call in_bulk() together with the order_by(“field_1”,
 “field_2”).distinct(“field_1”) and specifying field_name=“field_1”, then
 when the result is received, the sorting order of the elements passed to
 order_by() is preserved. Code example:


 {{{
 locations = (
     UserLocation.objects.order_by("user_id", "-date_create")
     .distinct("user_id")
     .in_bulk(field_name="user_id")
 )
 print(locations)
 }}}

 **>>>{2693: <UserLocation: 2023-03-01 15:17>}**

 However, if you specify an additional id_list argument in the in_bulk
 method, the sorting specified earlier in the request disappears, and as a
 result, another instance of the model is returned. Code example:


 {{{
 locations = (
     UserLocation.objects.order_by("user_id", "-date_create")
     .distinct("user_id")
     .in_bulk([2693], field_name="user_id")
 )
 print(locations)
 }}}

 **>>>{2693: <UserLocation: 2023-03-01 14:27>}**

 A user with id 2693 has several locations that differ in the date_create.
 The most recent is with a time of **15:17**. When sorting queryset by
 “-date_create” I want to get the most recent record. Therefore, the
 sorting is reset when passing the id_list parameter.

 In my opinion, the sorting from queryset was removed before it was
 possible to pass different field_name to the in_bulk() method. Apparently,
 it was not taken into account that when sorting is reset, the result
 obtained when using DISTINCT changes.

 [https://forum.djangoproject.com/t/using-in-bulk/19192]

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34378>
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070186a1105e03-753f00be-2e6f-4e51-948c-01e0ef8bef39-000000%40eu-central-1.amazonses.com.

Reply via email to