Django Query - Annotate With Boolean Value From Date Comparison

Viewed 254

I want to write a query which will have an annotation of expired based on a comparison of a date in the model and the date/time of now and receive a boolean value depending on the outcome. I can't find how this is done.

I have tried the below so far:

.annotate(expired=F( F('date_updated') > datetime_now))

Can someone let me know the way to achive this?

2 Answers

You can annotate the objects with a BooleanField that is the result of a condition with an ExpressionWrapper [Django-doc]:

from django.db.models import BooleanField, ExpressionWrapper, Q

MyModel.objects.annotate(
    expired=ExpressionWrapper(
        Q(date_updated__gt=datetime_now),
        output_field=BooleanField()
    )
)
Related