#35434: prefetch_related_objects fails to cache UUID FKs when the string
representation of a UUID is used
-------------------------------------+-------------------------------------
     Reporter:  Selcuk Ayguney       |                    Owner:  Selcuk
                                     |  Ayguney
         Type:  Bug                  |                   Status:  assigned
    Component:  Database layer       |                  Version:  dev
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Simon Charette):

 * cc: Simon Charette (added)

Comment:

 Have we performed any form of benchmarks to assess the impact of calling
 `to_python` for each sides of the prefetching ''bridge''?
 `Field.to_python` can perform non-trivial validation and instance checks
 that quickly add up when dealing with large collection of objects.

 Given `prefetch_related_object` is normally called from a
 `prefetch_related` queryset where both sides are already guaranteed to be
 of the right type and serializers/forms are meant to be turn
 representations of objects to the expected field types at input boundaries
 it seems like this change could do more harm than good both from a
 performance and areas of concerns violation perspective.

 My question to you would be why you are assigning the unexpected type to
 field in the first place (the `pet_id=str(pet.id)`)? Plenty of things
 subtly break if you assign the string representation of a `DateField`,
 `DecimalField`, `FloatField`, etc to a model instance field instead of the
 proper type so I'm not sure how this particular case is special. If you
 have to assign such properties I believe you should call `.full_clean()` /
 `clean_fields()` on the model instance and be ready to deal with any
 associated `ValidationError`.

 I'm more of the opinion that we should wont-fix this issue than proceed
 here.
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35434#comment:5>
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/0107018f499d80c7-8e25c675-3400-4c02-abe6-0f7198d44b1c-000000%40eu-central-1.amazonses.com.

Reply via email to