I do not think you want.
1) I think you do not understand what annotations do.
Creating aggregates for each item in a QuerySet
The second way to create summary values ββis to create an independent summary for each object in QuerySet. For example, if you are retrieving a list of books, you may know how many authors contributed to each book. Each book has a many-to-many relationship with the Author; we want to summarize these relationships for each book in the QuerySet.
Aggregate data for each object can be generated using the annotate () clause. When the annotate () condition is specified, each object in the QuerySet will be annotated with the specified values.
The syntax of these annotations is identical to the syntax that is used for aggregate () . Each annotate () argument describes the set to be calculated.
So when you say:
MyModel.objects.annotate(other_model__some_flag=Value(True, output_field=BooleanField()))
You are not some_flag annotation over other_model .
that is, you will not have: mymodel.other_model.some_flag
You annotate other_model__some_flag over mymodel .
that is, you will have: mymodel.other_model__some_flag
2) I'm not sure how familiar you are with SQL , but to keep MyModel.objects.filter(other_model__some_flag=True) possible, i.e. keep annotation when doing JOINS , ORM would have to do JOIN on subquery , something like:
INNER JOIN ( SELECT other_model.id, 1 as some_flag FROM other_model ) as sub on mymodel.other_model_id = sub.id
which would be very slow, and I'm not surprised that they do not.
Possible Solution
do not comment on your field, but add it as a regular field in your model.