2017-02-20 5 views
1
class TradeItem(models.Model): 
    ... 

class Wishlist(models.Model): 
    user = models.ForeignKey(User, related_name='wishlist_user') 
    item = models.ForeignKey(TradeItem, related_name='wishlist_item') 

TradeItemクエリーセットには、アイテムがこのユーザーのウィッシュリストにあるかどうかのブール値で注釈を付ける必要があります。Django別のクエリに応じてクエリーセットに注釈を付ける

items = TradeItem.objects.all().annotate(wishlist= 
<heresy> 
if Wishlist.objects.filter(user=request.user, item={current_item}: 
    True 
else: 
    False 
</heresy> 
) 

ような何かが注釈/骨材と言ったことを行うことが可能になり、何が一般的で、そのための最も効率的な方法だろうか?

答えて

1

この問題は、注釈がデータベース(SQL)レベルで発生していることです。あなたは、SQL方言(例えば、SUM、AVG ...のように)で自然にサポートされている関数のみを利用することができます。あなたが任意の属性/データ・フィールドを追加したい場合は、クエリセットを反復し、seperatlyすべてのインスタンスに対してこれをチェックする必要があります

items = TradeItem.objects.all() 
user_wishlist = Wishlist.objects.filter(user=request.user) 
for item in items: 
    item.wishlist = user_wishlist.filter(item=item).exists() 
+0

をありがとう、私はあなたの方法を使用し始め、それは私のコードをすっきりしました。私は悲しいことに、あなたがq何かをすることができるか分からなかった。何か=何か、ひどい。 –

関連する問題