Annotating a count of distinct ForeignKey (a) of a reverse foreignkey (b) doesn't work on oracle if (a) has any TextFields
|Reported by:||kimvais@…||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||1.5|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Description (last modified by shai)
If there is a model X that has foreignkey to model Y and X has foreign key to Z and has TextFields the query for an instance of Y fails.
y.xys.all().defer(list_of_all_text_fields).annotate(Count('z__pk', distinct=True) causes "DatabaseError: ORA-00932: inconsistent datatypes: expected - got NCLOB"
This is probably(?) because the "GROUP BY" clause will contain all the deferred fields.
As a workaround I have to do sum(len(set(x)) for x in y.xys.all().values_list('z__pk'))
Works flawlessly on PostgreSQL.
Change History (4)
comment:1 Changed 6 months ago by kimvais@…
- Needs documentation unset
- Needs tests unset
- Patch needs improvement unset
comment:2 Changed 6 months ago by shai
- Description modified (diff)
- Type changed from Uncategorized to Bug