我有一个名为UserCommunityProfiles的模型,其结构如下
class UserCommunityProfile(models.Model):
owner = models.ForeignKey(
User,
on_delete = models.CASCADE)
(...)
还有一个叫做订阅结构的模型:
^{pr2}$我要实现的是显示每个不在查询集订阅中的用户的配置文件,该用户是request.user
我所做的是我所做的
subs = subscriptions.objects.filter(subscriber=request.user)
profiles = UserCommunityProfile.objects.exclude(owner=subs)
但是我得到一个错误,说Cannot use QuerySet for "subscriptions": Use a QuerySet for "User".
我该怎么办?在
解决方案:
可以使用}的{}。在
QuerySet
s来过滤其他的QuerySet
,但正如这里的错误所说,您使用owner
s,这意味着它希望与包装User
s的QuerySet
一起工作,但是这里提供了一个包含{但是,我们可以使用以下查询:
此外,我们确实需要两个
^{pr2}$QuerySet
,我们可以这样查询:因此,这将提供一个}是}是{}。在
QuerySet
,其中包含所有UserCommunityProfile
,其中{subscribed_to
,而{如果您像上面演示的那样“组合”查询集,那么通常这将导致一个单个查询。这通常是更有效的,因为所有处理都是在数据库级别完成的,并且数据库针对这些任务进行了优化。在
然而,在某些情况下,不是的情况下,例如,如果一个有两个不相交的条件,并且每个条件都产生一个(独立的)
JOIN
列表,那么最好用一个UNION
重写查询。但事实并非如此。在相关问题 更多 >
编程相关推荐