Opened 10 years ago
Last modified 9 years ago
#24986 closed Bug
Selecting distinct on lower() function throws AttributeError("'Func' object has no attribute 'column'") — at Initial Version
Reported by: | Wojciech Bartosiak | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | F(), ORM, distinct |
Cc: | josh.smeaton@… | 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
I have simple table:
class Author(models.Model): name = models.CharField(max_length=40)
I want to write Query using Django ORM to be similar to:
SELECT DISTINCT LOWER(name) from my_app_author;
I finally ended with:
Author.objects.annotate( name_lower=Func(F('name'), function='lower') ).distinct('name_lower')
But I'm receiving error:
Traceback (most recent call last): File "/opt/venv/lib/python3.4/site-packages/django/db/models/query.py", line 138, in __repr__ data = list(self[:REPR_OUTPUT_SIZE + 1]) File "/opt/venv/lib/python3.4/site-packages/django/db/models/query.py", line 162, in __iter__ self._fetch_all() File "/opt/venv/lib/python3.4/site-packages/django/db/models/query.py", line 965, in _fetch_all self._result_cache = list(self.iterator()) File "/opt/venv/lib/python3.4/site-packages/django/db/models/query.py", line 238, in iterator results = compiler.execute_sql() File "/opt/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 829, in execute_sql sql, params = self.as_sql() File "/opt/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 381, in as_sql distinct_fields = self.get_distinct() File "/opt/venv/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 545, in get_distinct result.append("%s.%s" % (qn(alias), qn2(target.column))) AttributeError: 'Func' object has no attribute 'column'
but when i write:
Author.objects.annotate( name_lower=Func(F('name'), function='lower') ).distinct('something')
I'm receiving an error:
django.core.exceptions.FieldError: Cannot resolve keyword 'something' into field. Choices are: id, name, name_lower, src_id
Note:
See TracTickets
for help on using tickets.