我想按收件人用户对邮件数量进行分组 - > {'用户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()
?
result = Mensaje.objects.values('remitente__username').annotate(num_msg=Count('pk')).order_by('remitente__username')
你做.order_by('-fechaEnvio')
的order_by,在这种情况下没有逻辑。 (您正在尝试使用属性(fechaEnvio
)对表进行排序,该属性不属于新生成的group_by表)
您正在分组但是消息ID而不是用户ID。要按收件人的用户ID进行分组,您必须执行.values('remitente__pk')