Django filter in corresponding field using annotation

I want to filter using annotation.

Here is my code:

class Blog(models.Model): name = models.CharField(max_length=100) class Reader(models.Model): name = models.CharField(max_length=50) blog= models.ForeignKey(Blog) type = models.ForeignKey(ReaderType) class ReaderType(models.Model): name = models.CharField(max_length=50) 

I want to get an entire blog that has at least 2 Readers of type "male" . I have this code to get blogs that have at least 2 readings:

 Blog.objects.annotate(reader_count=Count(reader)).filter(reader_count__gte=2) 

How to add a part that filters only blogs that have at least 2 readers, that their type="male"

+4
source share
1 answer

You can simply filter the reader type directly in the request:

 posts_with_multiple_readers = ( Blog.objects.filter(reader__type__name='male') .annotate(reader_count=Count('reader')) .filter(reader_count__gte=2) ) 
+2
source

Source: https://habr.com/ru/post/1492918/


All Articles