Opened 7 years ago
Last modified 3 years ago
#29538 closed Bug
QueryExpression in ordering of a related object fails — at Initial Version
| Reported by: | wilhelmhb | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 2.0 |
| Severity: | Normal | Keywords: | ordering, query expression, related object |
| Cc: | wilhelmhb, colons, Eduardo Rivas | 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
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(null_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']
fails with 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.
Note:
See TracTickets
for help on using tickets.