Query Expression in ordering of a related object fails
Since 2.0, according to the doc (https://docs.djangoproject.com/en/2.0/ref/models/options/#ordering), we can use QueryExpression objects in the Model.Meta.ordering field.
Using:
from django.db import models
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100, null=True, blank=True)
class Meta:
ordering = [models.F('instrument').asc(nulls_last=True)]
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
class Meta:
ordering = ['artist']
>>> Album.objects.all()
...
TypeError: 'OrderBy' does not support indexing
When reaching https://github.com/django/django/blob/master/django/db/models/sql/compiler.py#L669, the compiler tries to use the related model, but at line 679, item
can be an OrderBy object. Thus the failure.
Change History (6)
Description: |
modified (diff)
|
Summary: |
QueryExpression in ordering of a related object fails →
Query Expression in ordering of a related object fails
|
Triage Stage: |
Unreviewed →
Accepted
|
Owner: |
changed from nobody to Alexandre Laplante
|
Status: |
new →
assigned
|
Patch needs improvement: |
set
|
Started working on a fix.