#35958 closed Bug (worksforme)
QuerySet.distinct() crashes with "SELECT DISTINCT ON expressions must match initial ORDER BY expressions"
Reported by: | adofosam | Owned by: | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 5.1 |
Severity: | Normal | Keywords: | distinct |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When I attempt to run the following code, I get an error.
Code:
user = User.objects.get(id=user_id) list = List.objects.filter(user=user).order_by('email').distinct('email')
Error (Context: my app is called "lists"):
django.db.utils.ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions LINE 1: SELECT COUNT(*) FROM (SELECT DISTINCT ON ("lists_list"...
I'm using a PostgreSQL database and my model is:
class EventList(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True) user= models.ForeignKey(User, on_delete=models.CASCADE) email = models.EmailField()
Change History (2)
comment:1 by , 21 hours ago
Description: | modified (diff) |
---|---|
Summary: | Issue with the distinct() function when specifying a field to run it on → QuerySet.distinct() crashes with "SELECT DISTINCT ON expressions must match initial ORDER BY expressions" |
comment:2 by , 16 hours ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
Version 0, edited 16 hours ago by (next)
Note:
See TracTickets
for help on using tickets.
I cannot reproduce the models you've provided (assuming you meant
EventList
in your report and notList
)the resulting SQL
{{{#sql
SELECT DISTINCT ON ("lists_eventlist"."email") "lists_eventlist"."id",
FROM "lists_eventlist"
WHERE "lists_eventlist"."user_id" = 1
ORDER BY "lists_eventlist"."email" ASC;
}}}
Something appears to be missing from your report and judging from your report it has something to do with the
order_by
specified prior todistinct
.