﻿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
26092	Regression when using order_by() on a ManyToManyField using the 'through' feature	Wenzel Jakob	nobody	"Hi,

I'm seeing a serious regression (AttributeError exception thrown) when using the order_by() feature on a ManyToManyField in combination with the 'through' feature.

This worked perfectly fine in Django 1.8.x, I'm seeing it for the first time now. IMHO it is a release blocker, but then the release is already out (so I set the severity as 'Normal').

See below for a minimal example:

{{{#!python
class Person(models.Model):
    name = models.CharField(max_length=200)


class Publication(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Person, through='Author')


class Author(models.Model):
    person = models.ForeignKey(Person, related_name='author_to_publication')
    publication = models.ForeignKey(Publication)
    order_id = models.PositiveSmallIntegerField(default=0)

    class Meta:
        ordering = ['order_id']
}}}

And here is an example test which causes the problem:

{{{#!python                                                                                                                                                
from django.test import TestCase

from .models import Person, Publication, Author


class Test(TestCase):
    def test(self):
        person = Person()
        person.save()
        publication = Publication(title='test publication')
        publication.save()
        author = Author(person=person, publication=publication, order_id=1)
        author.save()
        list(publication.authors.order_by('author_to_publication'))

Traceback (most recent call last):
  File ""<console>"", line 1, in <module>
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/query.py"", line 234, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/query.py"", line 258, in __iter__
    self._fetch_all()
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/query.py"", line 1074, in _fetch_all
    self._result_cache = list(self.iterator())
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/query.py"", line 52, in __iter__
    results = compiler.execute_sql()
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/sql/compiler.py"", line 837, in execute_sql
    sql, params = self.as_sql()
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/sql/compiler.py"", line 382, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/sql/compiler.py"", line 49, in pre_sql_setup
    order_by = self.get_order_by()
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/sql/compiler.py"", line 295, in get_order_by
    field, self.query.get_meta(), default_order=asc))
  File ""/Users/wenzel/mysite/lib/python3.4/site-packages/django/db/models/sql/compiler.py"", line 571, in find_ordering_name
    if field.is_relation and path and opts.ordering and name != field.attname:
AttributeError: 'ManyToOneRel' object has no attribute 'attname'
}}}"	Bug	closed	Database layer (models, ORM)	1.9	Release blocker	fixed			Accepted	1	0	0	0	0	0
