Aggregates default to the database type instead of the field type
|Reported by:||WoLpH||Owned by:||wogan|
|Component:||Database layer (models, ORM)||Version:||1.2|
|Severity:||Normal||Keywords:||aggregate, annotate, type, coerce|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
First a little background information, I've got a couple of custom field types which get cast right after loading the model.
So instead of a Decimal I get a Euro object with added features like formatting and stuff like that.
However, it seems that the aggregate/annotate queries in Django do not respect the to_python() method but simply cast to the type specified by the database backend.
This can easily be fixed by modifying convert_values() so it returns this:
return field.to_python(connection.ops.convert_values(value, field))
return connection.ops.convert_values(value, field)
The convert_values() function: http://code.djangoproject.com/browser/django/trunk/django/db/models/sql/query.py#L298
Would this be the proper location to fix this? Either way, it has to be a bug that the max() of a value returns a different type.
Change History (7)
comment:1 Changed 5 years ago by nwp
- Needs documentation unset
- Needs tests unset
- Owner changed from nobody to nwp
- Patch needs improvement unset
- Status changed from new to assigned
- Triage Stage changed from Unreviewed to Accepted