WHEN EXISTS Query in SQL to Django Queryset

19 views
Skip to first unread message

Dheerendra Rathor

unread,
Aug 20, 2015, 1:26:36 PM8/20/15
to Django users
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

           
)
       
)



Reply all
Reply to author
Forward
0 new messages