Skip to main content
 首页 » 编程设计

python之基于另一个查询集过滤一个查询集

2025年05月04日20jillzhang

我有一个名为 UserCommunityProfiles 的模型,其结构如下

class UserCommunityProfile(models.Model): 
    owner = models.ForeignKey( 
        User, 
        on_delete = models.CASCADE) 
    (...) 

和一个称为结构化订阅的模型:

class subscriptions(models.Model): 
    subscriber = models.ForeignKey( 
        User, 
        on_delete = models.CASCADE, related_name='subscriber' 
    ) 
    subscribed_to = models.ForeignKey( 
        User, 
        on_delete = models.CASCADE, related_name='subscribed_to' 
    ) 

我想要实现的是将不在查询集中订阅中的每个用户的配置文件显示为 subscribed_to 并且订阅者是 request.user

我所做的就是我所做的 View

subs = subscriptions.objects.filter(subscriber=request.user) 
profiles = UserCommunityProfile.objects.exclude(owner=subs) 

但我收到一条错误消息,提示 无法将 QuerySet 用于“订阅”:将 QuerySet 用于“用户”。 我该怎么办?

请您参考如下方法:

解决方法:

subs=User.objects.filter(subscribed_to__subscriber=request.user).values_list('id') 
profiles = UserCommunityProfile.objects.exclude(owner__in=subs)