views.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.db.models import Count, Q
  2. from django.http import JsonResponse
  3. def channel_videos_distribution(request, playlist_id):
  4. labels = []
  5. data = []
  6. playlist_items = request.user.playlists.get(playlist_id=playlist_id).playlist_items.all()
  7. queryset = playlist_items.filter(Q(video__is_unavailable_on_yt=False) & Q(video__was_deleted_on_yt=False)).values(
  8. 'video__channel_name').annotate(channel_videos_count=Count('video_position')).order_by(
  9. '-channel_videos_count')
  10. for entry in queryset:
  11. labels.append(entry['video__channel_name'])
  12. data.append(entry['channel_videos_count'])
  13. return JsonResponse(data={
  14. 'labels': labels,
  15. 'data': data,
  16. })
  17. def overall_playlists_distribution(request):
  18. labels = []
  19. data = []
  20. user_playlists = request.user.playlists.filter(is_in_db=True)
  21. total_num_playlists = user_playlists.count()
  22. user_playlists = user_playlists.filter(num_of_accesses__gt=0).order_by(
  23. "-num_of_accesses")
  24. statistics = {
  25. "public": 0,
  26. "private": 0,
  27. "favorites": 0,
  28. "watching": 0,
  29. "imported": 0,
  30. "youtube mixes": 0
  31. }
  32. if total_num_playlists != 0:
  33. statistics["public"] = user_playlists.filter(is_private_on_yt=False).count()
  34. statistics["private"] = user_playlists.filter(is_private_on_yt=True).count()
  35. statistics["favorites"] = user_playlists.filter(is_favorite=True).count()
  36. statistics["watching"] = user_playlists.filter(marked_as="watching").count()
  37. statistics["imported"] = user_playlists.filter(is_user_owned=False).count()
  38. statistics["youtube mixes"] = user_playlists.filter(is_yt_mix=True).count()
  39. for key, value in statistics.items():
  40. labels.append(key)
  41. data.append(value)
  42. return JsonResponse(data={
  43. 'labels': labels,
  44. 'data': data,
  45. })