I want to filter the results before counting. In below code, I am counting the total number of workers for each Ticket Counter.
class TicketCounterList(ListAPIView):
queryset = TicketCounter.objects.filter(ticket_counter_is_deleted=False)
.annotate(num_workers=Count('workers'))
serializer_class = TicketCounterSerializer
workers
in the above code is the related_name
from another model ( WorkerToTicketCounter
model). What I want to do is, I want to be able to filter workers with a condition is_deleted= True
rather than counting all workers. Is it possible? I am using Django 1.11.13
Is there anything like below
queryset = TicketCounter.objects.filter(ticket_counter_is_deleted=False)
.annotate(num_workers=Count('workers',filter="xxxx"))
get it? I want to filter the workers
.
EDIT: My Models:
class TicketCounter(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ticket_counter_name = models.CharField(max_length=100, default="")
ticket_counter_description = models.CharField(max_length=1500, default="")
ticket_counter_address = models.CharField(max_length=1500, default="")
class WorkerToTicketCounter(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
ticket_counter = models.ForeignKey(TicketCounter,related_name="workers")
worker = models.ForeignKey(User,related_name='worker_for_ticket_counter')
My Serializer:
class TicketCounterSerializer(serializers.ModelSerializer):
num_workers = serializers.IntegerField()
class Meta:
model = TicketCounter
fields = (
'ticket_counter_name',
'ticket_counter_description',
'ticket_counter_address',
'num_workers',
)