2015-07-21 38 views
0

我使用MS SQL Server作爲Django的數據庫(使用pyodbc Django的模塊)CONVER子查詢和案件Django的ORM

有兩個表,項目和喜愛的項目

如何以下查詢轉換的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

我知道有一些替代方法,使用 '生',「@property d生態化「等人來解決這個問題。

但是,我想知道是否有機會使用純Django ORM來解決此問題。

謝謝,

回答

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()))