#36288 closed Bug (fixed)
Regression in values_list() with duplicated field names
| Reported by: | Claude Paroz | Owned by: | Simon Charette |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 5.2 |
| Severity: | Release blocker | Keywords: | |
| Cc: | Simon Charette | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
In Django 5.2, a call to values_list("field", "field") will return tuples with a single member, as duplicated field names seem to be filtered out somewhere.
I suspect a regression caused by #28900.
Change History (7)
comment:1 by , 7 months ago
| Cc: | added |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 7 months ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
This is effectively a regression caused by #28900 (55bacb7a2a7b65c0708d0b2f28e1f9c83c76509e) as sql.Query.selected is now a dict[alias, Expression] and since values_list defaults to using the provided strings as field names they get considered to be a single one.
We'll most likely have to generate an alias for the existing members with colliding names.
comment:3 by , 7 months ago
| Has patch: | set |
|---|
comment:4 by , 7 months ago
Thanks for the quick reaction! FWIW, the use case that revealed this was a QuerySet to produce tuples for form choices where the value and the verbose parts were identical.
comment:5 by , 7 months ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Thank you Claude for the report! I have reproduced with the following:
>>> import django >>> django.VERSION (6, 0, 0, 'alpha', 0) >>> [i for i in User.objects.all().values_list("username", "username")] [('admin',)]Versus:
>>> import django >>> django.VERSION (5, 1, 7, 'final', 0) >>> from django.contrib.auth.models import User >>> [i for i in User.objects.all().values_list("username", "username")] [('admin', 'admin')]Now, I'm not sure this is a bug? I mean there is certainly a change in behavior, but to me the 5.1 result feels "buggy", so in a way this "was fixed" in 5.2.
On the other hand, the DB query does duplicate the columns so perhaps this *is* a regression:
Claude, could you indulge me and share in the ticket the use case for getting the repeated fields in the
values_listresult? Accepting in the meantime.