#33276: Strange difference for prefetched_objects between related_field.remove,
m2m_related_field.remove and generic_related_field.remove.
-------------------------------------+-------------------------------------
               Reporter:  Maxim      |          Owner:  nobody
  Danilov                            |
                   Type:             |         Status:  new
  Cleanup/optimization               |
              Component:  Database   |        Version:  3.2
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:  prefetch_related
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  1
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 Hello.

 i want to call _remove_prefetched_objects only to remove cached old data.
 But i dont want to use private method.

 instance.m2m_related_field.remove() - made what i want.

 instance.generic_related_field.remove() - Does nothing
 instance.related_field.remove() - Does nothing

 in django (> 3.2) code i see:

 {{{
 # (django.db.models.fields.related_descriptors 964-965)
 # m2m_related_field
 def remove(self, *objs):
     self._remove_prefetched_objects()
     ...


 # (django.contrib.contenttypes.fields 635-645)
 # generic_related_field
 def remove(self, *objs, bulk=True):
     if not objs:
         return
     ...
     return self._clear(...)

 def _clear(...):
     self._remove_prefetched_objects()


 # (django.db.models.fields.related_descriptors 694-719)
 # related_field
 def remove(self, *objs, bulk=True):
     if not objs:
         return
     ....
     return self_clear(...)

 def _clear(...):
     self._remove_prefetched_objects()
 }}}

 i think, It is better to made the same functionality in remove method for
 all related fields.

 {{{
 # for all related fields:
 def remove(self, *objs):
     self._remove_prefetched_objects()
     if objs:
         return self._do_something_to_remove(....)
 }}}

 This made a removal interface more standard.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33276>
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/052.61e34c6f8a19c5a832aa9501c4cdd543%40djangoproject.com.

Reply via email to