Channel
class VideoChannel(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
name=models.CharField(max_length=200)
detail=models.TextField()
def __str__(self):
return self.name
Videos
class Video(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
channel=models.ForeignKey(VideoChannel,on_delete=models.CASCADE,null=True)
src=models.FileField(upload_to='videos/')
title=models.CharField(max_length=200,help_text='Enter Title')
def __str__(self):
Fetch channels with videos count
VideoChannel.objects.annotate(videos_count=Count('video')).all()
Fetch channels that have videos
VideoChannel.objects.annotate(videos_count=Count('video')).filter(videos_count__isnull=False)
Fetch channels that have no videos
VideoChannel.objects.annotate(videos_count=Count('video')).filter(videos_count__isnull=True)
Fetch channels with no less than 5 videos
VideoChannel.objects.annotate(videos_count=Count('video')).filter(videos_count__gte=5)
Fetch channels ordered by number of videos
VideoChannel.objects.annotate(videos_count=Count('video')).order_by('videos_count')
Generating aggregates for each item in a QuerySet
from django.db.models import Count
q = Book.objects.annotate(Count('authors'))