﻿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
17990	DISTINCT querysets with RANDOM ordering crash with DatabaseError in Postgres	Paul Bailey	Ryan Cheley	"When using distinct().order_by('?') with Postgres you get a query error.

My models:
{{{
class Category (models.Model):
  title = models.CharField(max_length=100)
  slug = models.SlugField(unique=True, max_length=200)
  
class Post (models.Model):
  title = models.CharField(max_length=255)
  slug = models.SlugField(unique=True, max_length=200)
  publish = models.DateTimeField()
  categories = models.ManyToManyField(Category)
  body = models.TextField()

}}}

Causes Bug in Postgres but not SQLite:
{{{
return Post.objects.filter(categories__in=cats).exclude(id=self.id).order_by('?').distinct()[:5]
}}}

No Error:
{{{
return Post.objects.filter(categories__in=cats).exclude(id=self.id).distinct()[:5]
}}}

Traceback:
{{{
ERROR:django.request:Internal Server Error: /blog/online-photo-editors/                                                                           
Traceback (most recent call last):                                                                                                                
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/core/handlers/base.py"", line 136, in get_response                          
    response = response.render()                                                                                                                  
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/response.py"", line 104, in render                                 
    self._set_content(self.rendered_content)                                                                                                      
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/response.py"", line 81, in rendered_content                        
    content = template.render(context)                                                                                                            
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 140, in render                                     
    return self._render(context)                                                                                                                  
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 134, in _render                                    
    return self.nodelist.render(context)                                                                                                          
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 823, in render                                     
    bit = self.render_node(node, context)                                                                                                         
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 837, in render_node                                
    return node.render(context)                                                                                                                   
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/loader_tags.py"", line 123, in render                              
    return compiled_parent._render(context)                                                                                                       
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 134, in _render                                    
    return self.nodelist.render(context)                                                                                                          
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 823, in render                                     
    bit = self.render_node(node, context)                                                                                                         
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 837, in render_node                                
    return node.render(context)                                                                                                                   
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/loader_tags.py"", line 62, in render                               
    result = block.nodelist.render(context)                                                                                                       
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 823, in render                                     
    bit = self.render_node(node, context)                                                                                                         
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/base.py"", line 837, in render_node                                
    return node.render(context)                                                                                                                   
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/template/defaulttags.py"", line 145, in render                              
    len_values = len(values)                                                                                                                      
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/db/models/query.py"", line 85, in __len__                                   
    self._result_cache = list(self.iterator())                                                                                                    
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/db/models/query.py"", line 291, in iterator                                 
    for row in compiler.results_iter():                                                                                                           
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py"", line 763, in results_iter                      
    for rows in self.execute_sql(MULTI):                                                                                                          
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py"", line 818, in execute_sql                       
    cursor.execute(sql, params)                                                                                                                   
  File ""/home/webapp/pyenv/cr/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py"", line 52, in execute              
    return self.cursor.execute(query, args)                                                                                                       
DatabaseError: for SELECT DISTINCT, ORDER BY expressions must appear in select list                                                               
LINE 1: ..."" = 4 ) AND NOT (""blog_post"".""id"" = 4 )) ORDER BY RANDOM() L...            
}}}

"	Bug	closed	Database layer (models, ORM)	1.4	Normal	duplicate		Étienne Beaulé	Accepted	0	0	0	0	0	0
