﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24986	"Selecting distinct on lower() function throws AttributeError(""'Func' object has no attribute 'column'"")"	Wojciech Bartosiak	nobody	"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
}}}


As database driver I'm using `'ENGINE': 'django.contrib.gis.db.backends.postgis'`




"	Bug	new	Database layer (models, ORM)	1.8	Release blocker		F(), ORM, distinct		Unreviewed	0	0	0	0	0	0
