簡體   English   中英

Django order_by 無法正常工作

[英]Django order_by not working properly

我試圖讓所有對話按它最后一條消息排序,但是當我使用order_by子句時,對話會重復。

沒有 order_by 的查詢:

conversaciones = Conversacion.objects.filter(usuarios=request.user)

結果(按對話分組但不按最近的最后一條消息排序):

按對話分組但不按最近的最后一條消息排序

用 order_by 查詢:

conversaciones = Conversacion.objects.filter(usuarios=request.user).order_by('-mensaje__fechaEnvio')

結果:

卧槽

我的模型.py:

class Mensaje(models.Model):
    remitente = models.ForeignKey('Usuario', on_delete=models.CASCADE, related_name='remitente')
    destinatario = models.ForeignKey('Usuario', on_delete=models.CASCADE, related_name='destinatario')
    cuerpo = models.TextField(validators=[MaxLengthValidator(750)]) 
    leido = models.BooleanField(default=False)
    fechaEnvio = models.DateTimeField(auto_now_add=True)
    conversacion = models.ForeignKey('Conversacion', on_delete=models.CASCADE)

    class Meta:
        ordering = ['-fechaEnvio'] 

    def __str__(self):
        return str(self.remitente) + ' -> ' + str(self.destinatario)


class Conversacion(models.Model):
    usuarios = models.ManyToManyField('Usuario', related_name='usuarios')
    agresion = models.ForeignKey('Agresion', on_delete=models.CASCADE)

    @property
    def ultimoMensaje(self):
        return self.mensaje_set.latest('fechaEnvio')

我找到了一個解決方案:

conversaciones = Conversacion.objects.filter(usuarios=request.user).annotate(max_fecha=Max('mensaje__fechaEnvio')).order_by('-max_fecha')

我正在使用 MySQL,所以我不能將 distinct 與參數一起使用。

正如@jota 所建議的,我可以在您的 Mesanje 模型中添加一些內容。 訂購一個元組,不要忘記添加逗號,不要忘記再次進行遷移。

class Mesanje(models.Model):
      ........
      class Meta:
           ordering = ('-fechaEnvio',)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM