module
pretalx.submission.domain.queries.review
Functions 7
annotate_aggregate_scores(queryset)source
def annotate_aggregate_scores(queryset):
return queryset.annotate(
median_score=Median("reviews__score", filter=Q(reviews__score__isnull=False)),
mean_score=Avg("reviews__score", filter=Q(reviews__score__isnull=False)),
)
annotate_review_count(queryset)source
def annotate_review_count(queryset):
review_count = (
Review.objects.filter(submission=OuterRef("pk"))
.order_by()
.values("submission")
.annotate(count=Count("pk"))
.values("count")
)
return queryset.annotate(review_count=Coalesce(Subquery(review_count), Value(0)))
annotate_scored_review_count(queryset)source
def annotate_scored_review_count(queryset):
return queryset.annotate(
review_nonnull_count=Count(
"reviews", distinct=True, filter=Q(reviews__score__isnull=False)
)
)
annotate_state_rank(queryset)source
def annotate_state_rank(queryset):
return queryset.annotate(
state_rank=Case(
When(state=SubmissionStates.SUBMITTED, then=1),
When(state=SubmissionStates.ACCEPTED, then=2),
When(state=SubmissionStates.CONFIRMED, then=3),
When(state=SubmissionStates.REJECTED, then=4),
default=5,
output_field=IntegerField(),
)
)
annotate_user_review_score(queryset, user)source
def annotate_user_review_score(queryset, user):
user_reviews = Review.objects.filter(
user=user, submission_id=OuterRef("pk")
).values("score")
return queryset.annotate(user_score=Subquery(user_reviews))
review_dashboard_prefetches(queryset)source
def review_dashboard_prefetches(queryset):
return queryset.select_related("track", "submission_type").prefetch_related(
"speakers",
"reviews",
"reviews__user",
"reviews__scores",
"tags",
"answers",
"answers__options",
"answers__question",
)
review_view_submissions(event)source
def review_view_submissions(event):
return event.submissions.with_sorted_speakers().prefetch_related(
"resources",
Prefetch(
"speakers__submissions", queryset=Submission.objects.select_related("event")
),
)