Django查询没有分组

问题描述 投票:0回答:2

我想按收件人用户对邮件数量进行分组 - > {'用户1':5}; {'用户2':7} ...

我的模特:

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')
    mensaje = models.TextField(validators=[MaxLengthValidator(1000)]) 
    leido = models.BooleanField(default=False)
    fechaEnvio = models.DateTimeField(auto_now_add=True)

我的查询:

 mensajes = Mensaje.objects.filter(destinatario=request.user).values('pk', 'remitente__username').annotate(num_msg=Count('pk')).order_by('-fechaEnvio')

结果:

{'pk': 28, 'remitente__username': 'Paco', 'num_msg': 1}, {'pk': 27, 'remitente__username': 'Paco', 'num_msg': 1}, {'pk': 26, 'remitente__username': 'jota', 'num_msg': 1}, {'pk': 25, 'remitente__username': 'jota', 'num_msg': 1}...

如您所见,查询返回所有消息,而不是逐个用户。

另一个问题:为什么不工作mensajes = request.user.mensaje_set.all()

python django
2个回答
1
投票
result = Mensaje.objects.values('remitente__username').annotate(num_msg=Count('pk')).order_by('remitente__username')

你做.order_by('-fechaEnvio')的order_by,在这种情况下没有逻辑。 (您正在尝试使用属性(fechaEnvio)对表进行排序,该属性不属于新生成的group_by表)


0
投票

您正在分组但是消息ID而不是用户ID。要按收件人的用户ID进行分组,您必须执行.values('remitente__pk')

© www.soinside.com 2019 - 2024. All rights reserved.