Reescrevendo esta consulta de access ao database para contornar o erro ‘DISTINCT ON’, no Django

Eu tenho dois modelos muito simples:

class Link(models.Model): description = models.TextField(validators=[MaxLengthValidator(500)]) submitter = models.ForeignKey(User) submitted_on = models.DateTimeField(auto_now_add=True) class Publicreply(models.Model): submitted_by = models.ForeignKey(User) answer_to = models.ForeignKey(Link) submitted_on = models.DateTimeField(auto_now_add=True) description = models.TextField(validators=[MaxLengthValidator(250)]) 

No lance para obter o último publicreply para cada object de link , eu tentei isso: latest_replies = Publicreply.objects.filter(answer_to_id__in=link_ids).order_by('answer_to', 'submitted_on').distinct('answer_to') onde link_ids é uma lista de todos os objects de link que eu precisava neste caso em particular.

O problema é que eu recebo um campo DISTINCT ON não é suportado por este backend de database . Estou no SQLite localmente, Postgres em produção. O que é uma maneira de rewrite esta consulta de modo que eu obtenha o mesmo resultado? Observe que não quero executar uma consulta de database em um loop FOR – descrevi isso e os resultados são muito desagradáveis. Existe uma única consulta para fazer o trabalho?

Você poderia simplesmente cuidar do distinct na memory.

 replies_by_link = {} replies = Publicreply.objects.filter(answer_to_id__in=link_ids).order_by('answer_to', 'submitted_on') for reply in replies: if reply.answer_to_id not in replies_by_link: replies_by_link[reply.answer_to_id] = reply 

e então você pode acessar todas as respostas via replies_by_link.values() .