Я хочу отфильтровать результаты перед подсчетом. В приведенном ниже коде я подсчитываю общее количество работников для каждого счетчика билетов.
class TicketCounterList(ListAPIView):
queryset = TicketCounter.objects.filter(ticket_counter_is_deleted=False)
.annotate(num_workers=Count('workers'))
serializer_class = TicketCounterSerializer
workers
в приведенном выше коде - это related_name
от другой модели (WorkerToTicketCounter
модель). Я хочу, чтобы я мог фильтровать работников с условием is_deleted= True
, а не считать всех работников. Является ли это возможным? Я использую Django 1.11.13
Есть что-нибудь подобное ниже
queryset = TicketCounter.objects.filter(ticket_counter_is_deleted=False)
.annotate(num_workers=Count('workers',filter="xxxx"))
понял? Я хочу отфильтровать workers
.
EDIT:
Мои модели:
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')
Мой сериализатор:
class TicketCounterSerializer(serializers.ModelSerializer):
num_workers = serializers.IntegerField()
class Meta:
model = TicketCounter
fields = (
'ticket_counter_name',
'ticket_counter_description',
'ticket_counter_address',
'num_workers',
)