Hello,
I've a complex SQL Query
SELECT DISTINCT "event_event"."id", "event_event"."title", "event_event"."description", "event_event"."category", "event_event"."event_time", "event_event"."event_place", "event_event"."time", "event_event"."cancelled", "event_event"."posted_by_id",
CASE WHEN EXISTS (SELECT * FROM "event_eventviews" WHERE "event_eventviews"."user_id" = 5 AND "event_eventviews"."event_id"=("event_event"."id")) THEN True ELSE False
END AS "liked",
CASE WHEN EXISTS (SELECT * FROM "event_eventviews" WHERE "event_eventviews"."user_id" = 5 AND "event_eventviews"."event_id"=("event_event"."id")) THEN True ELSE False
END AS "viewed" FROM "event_event"
ORDER BY "event_event"."id" DESC
I want to convert it to Django Queryset, but I'm unable to do so. I tried annotation but that adds an outerjoin which results into extra result in queryset.
Here is what I tried in Django:
queryset = Event.objects.all().order_by('-id').annotate(
viewed = Case(
When(Q(views__user=request.user) & Q(views__event=F('id')), then=True),
output_field=models.BooleanField(),
default=False
),
liked= Case(
When(Q(likes__user=request.user) & Q(likes__event=F('id')), then=True),
output_field=models.BooleanField(),
default=False
)
)