2017-02-20 123 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 queryset,以确定项是否在此用户的愿望清单中。像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

谢谢你,我开始使用你的方法,这使我的代码更简洁。我很遗憾地不知道你可以做些什么事情,太可怕了。 –