Как я могу получить идентификатор объекта внутри кверисета предварительной выборки?

У меня возникли трудности с получением идентификатора объекта внутри набора запросов Prefetch.

models.py

class ProductBatch(models.Model):

    name = models.CharField(max_length=100)
    product = models.ForeignKey(
        MstProduct, on_delete=models.CASCADE, related_name="product_batch"
    )
    tutors = models.ManyToManyField(
        settings.AUTH_USER_MODEL, blank=True, related_name="handling_product_batches"
    )


class TrnEvent(models.Model):

    event_teacher = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
        null=False, blank=False, related_name="trnevent",
    ) # -------> field for mapping the tutors from ProductBatch model
    title = models.TextField(null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()
    product = models.ForeignKey(
        MstProduct, on_delete=models.CASCADE, related_name="product_batch"
    )
    product_batch = models.ForeignKey(
        "MstProductBatch",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name="product_batch_events",
    )

    class Meta:
        app_label = "api"
        db_table = "trn_event"
        verbose_name = "trn_event"
        verbose_name_plural = "trn_events"

views.py

class ProductBatchesView(generics.ListCreateAPIView):

    def get_queryset(self):
        batches = (
            MstProductBatch.objects.filter(
                product_id=self.kwargs["product_id"],
            )
            .annotate(batch_id=F("id"))
            .prefetch_related(
                Prefetch(
                    "tutors",
                    MstUser.objects.filter(
                        is_active=True,
                        role__role_code="TCR",
                        institute=self.request.user.institute,
                    ).annotate(
                        total_events_count=Count(
                            "trnevent",
                            filter=Q(trnevent__product_batch__id=F("batch_id"))
                        ),
                    ),
                ),
            )
        )
        return batches

Я хотел аннотировать общее количество TrnEvent, созданных для наставников. Я пытался фильтровать product_batch модели TrnEvent из аннотации F-объекта batch_id. Но это не сработало.

К сожалению, данные total_events_count включают другие пакетные события, которые были отображены на тьютор.

Вернуться на верх