Opened 6 years ago

Closed 4 years ago

Last modified 4 years ago

#14879 closed Bug (worksforme)

Aggregates (Min, Max) for CharField fails with Postgresql

Reported by: wejaay Owned by: wogan
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords: aggregate, postgresql, charfield
Cc: mike@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: yes Patch needs improvement: yes
Easy pickings: no UI/UX: no


If you try to do aggregate on a CharField using with Min or Max, it works fine in sqlite3 but fails in PostgresSQL. I have version 9.0 of postgres and latest dev version of django.

The error occurs because Django is trying to convert the string to float in, line number 399.
Thats the version where this code was first introduced and as far as I can tell its been broken all the way from then to most recent version, line 553.

One fix that seems to work is to change line 549 from elif internal_type in ('DateField', 'DateTimeField', 'TimeField'): to elif internal_type in ('DateField', 'DateTimeField', 'TimeField', 'CharField'):

I dont know if that has other side effects. If I am doing something wrong, please let me know.

Change History (7)

comment:1 Changed 6 years ago by russellm

  • Has patch set
  • Needs documentation unset
  • Needs tests set
  • Patch needs improvement set
  • Triage Stage changed from Unreviewed to Accepted

Marking has-patch because there is a proposed fix, but it needs tests, and needs to be turned into a diff.

comment:2 Changed 6 years ago by wogan

  • Owner changed from nobody to wogan
  • Status changed from new to assigned
  • Version changed from 1.2 to SVN

comment:3 Changed 5 years ago by jaddison

  • Severity set to Normal
  • Type set to Bug

comment:4 Changed 5 years ago by aaugustin

  • UI/UX unset

Change UI/UX from NULL to False.

comment:5 Changed 5 years ago by aaugustin

  • Easy pickings unset

Change Easy pickings from NULL to False.

comment:6 Changed 4 years ago by carbonXT

  • Cc mike@… added

comment:7 Changed 4 years ago by slurms

  • Resolution set to worksforme
  • Status changed from assigned to closed

I can't reproduce this on Django 1.5b2 and PostgreSQL 9.1.7. It appears convert_values was changed in commit 12a96bfa263d514884ef11009913b2f8bb163472 and this would have fixed the issue.

    In [2]: User.objects.all().aggregate(Max('username'))
    Out[2]: {'username__max': u'test'}
Last edited 4 years ago by slurms (previous) (diff)
Note: See TracTickets for help on using tickets.
Back to Top