Как использовать Q objcts в annotate tortoise

Итак, у меня есть модели Announcement, User, FavoriteAnnouncement

class FavoriteAnnouncement(CoreModel):
    user = fields.ForeignKeyField('models.User', related_name='favorites')
    announcement = fields.ForeignKeyField(
        'models.Announcement',
        related_name='favorites'
    )

я хочу добавить аннотированное поле is_user_fav : Optional[bool]

Я нашел решение в django (

queryset = queryset.annotate(is_user_fav=ExpressionWrapper(
            Q(...),
            output_field=BooleanField(),
        ),)

)

Как я могу сделать подобное в TortoiseORM?

Вы можете использовать оператор CASE вместо выражения Q. Вот пример, который дает искомый булев результат:

from tortoise.expressions import Case, When

queryset = queryset.annotate(is_user_fav=Case(
    When(..., then=True),
    default=False
))

Вы можете рассматривать When практически так же, как и Q, просто это позволяет вам указать, каким должно быть значение, когда это условие выполняется.

Вернуться на верх