Как использовать 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, просто это позволяет вам указать, каким должно быть значение, когда это условие выполняется.