Skip to main content
 首页 » 编程设计

python之Django 根据另一个查询注释查询集

2024年10月01日30bonelee

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 查询集用一个 bool 值注释,说明某个项目是否在该用户的愿望 list 中。有点像

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

是否可以使用注释/聚合来完成所说的事情,通常最有效的方法是什么?

请您参考如下方法:

您可以在单个查询中使用Exists 在数据库级别实际解决这个问题:

from django.db.models import Exists, OuterRef 
user_wishlist = Wishlist.objects.filter(item_id=OuterRef('id'), user=user) 
items = TradeItem.objects.annotate(in_wishlist=Exists(user_wishlist)) 

PS:我知道,老问题...