#35434: prefetch_related_objects fails to cache UUID FKs when the string
representation of a UUID is used
-------------------------------------+-------------------------------------
Reporter: Selcuk Ayguney | Owner: (none)
Type: | Status: new
Cleanup/optimization |
Component: Documentation | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Jacob Walls):
* component: Database layer (models, ORM) => Documentation
* has_patch: 1 => 0
* owner: Selcuk Ayguney => (none)
* stage: Accepted => Unreviewed
* status: assigned => new
* type: Bug => Cleanup/optimization
Comment:
Thanks, that helps me understand the severity of the anti-pattern.
Now I'm aware that despite the implicit type-conversion you get on the
database-side, python-side operations like `==` or `obj in queryset`
become unsafe when a stringified UUID is assigned to a model attribute.
Or even `queryset.contains()`, but only if called on an evaluated
queryset.
{{{
In [1]: from models import GraphModel
In [2]: original = GraphModel.objects.first()
In [3]: unsafe = GraphModel(str(original.pk))
In [4]: all_graphs = GraphModel.objects.all()
In [5]: all_graphs.contains(unsafe)
Out[5]: True
In [6]: len(all_graphs)
Out[6]: 1
In [7]: all_graphs.contains(unsafe)
Out[7]: False
}}}
I think a version of that REPL would be useful in the docs somewhere.
Calling your query tested by testing as far as line 5 but not line 7 is
something I can see happening.
Selcuk, is it okay if I reframe your ticket as a documentation request and
ask for another opinion?
--
Ticket URL: <https://code.djangoproject.com/ticket/35434#comment:11>
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/0107018f4afe98e9-93e3c21d-091f-458f-8877-1c0f2fc36662-000000%40eu-central-1.amazonses.com.