Как я могу получить идентификатор объекта внутри кверисета предварительной выборки?
У меня возникли трудности с получением идентификатора объекта внутри набора запросов 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 включают другие пакетные события, которые были отображены на тьютор.