[英]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.