我使用MS SQL SERVER作为Django DATABASE(使用pyodbc django模块)
有两个表,项目和最喜欢的项目
如何将以下查询转换为Django ORM
SELECT item_id,
CASE WHEN
item_id IN (SELECT item_id FROM FavoriteItem WHERE user_id='test_user')
THEN 1
ELSE 0
END as is_favorite_item
FROM Item
两个模型已经在models.py中定义为ItemModel和FavoriteItemModel
我知道有一些替代方法可以使用'raw','@property decoration'等来解决这个问题。
但是,我想知道是否有机会使用纯Django ORM来解决这个问题。
谢谢,
答案 0 :(得分:1)
自己回答。
from django.db.models import Case, When, Value, BooleanField
favorite_items = FavoriteItem.objects.filter(user_id='test_user')
items = Item.objects.annotate(
is_favorite_item=Case(
When(item_id__in=favorite_items.values('item_id'), then=True),
default=Value(False),
output_field=BooleanField()))