module
pretalx.submission.domain.queries.review
Functions 6
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_view_submissions(event, user)source
def review_view_submissions(event, user):
from pretalx.submission.domain.queries.submission import ( # noqa: PLC0415 -- circular import
submissions_for_user,
)
return event.submissions.with_sorted_speakers().prefetch_related(
"resources",
Prefetch(
"speakers__submissions",
queryset=submissions_for_user(event, user).order_by("title"),
),
)