Django:返回在2个模型中具有非重叠值的查询集

时间:2011-11-03 05:19:46

标签: django django-queryset

我有2个型号:

Pages
------------
Page    User
S500    John
Gimp    John
WoW     John

Subscriptions
------------
Page    User 
S500    John

因此,Subs模型中的Page字段是FK to Pages模型。我正在尝试返回一个查询集,该查询集将显示属于John的所有页面拥有属于他的订阅。

我尝试过类似的事情:

fbpages = Page.objects.filter(user='John').exclude(id__in=[Page.id for Page in Page.subscriptions.filter(Page=Page)])

我认为我很接近,但我不确定该查询在哪里出错。

我做了类似的事情:

current_subs = Subscriptions.objects.filter(user='John')
pages = Page.objects.filter(user='John').exclude(id__in=[subs.Page.id for subs in current_subs])

哪个有效,但如何将其合并为一个查询?

2 个答案:

答案 0 :(得分:1)

pages = Page.objects.filter(user='John').exclude(subscriptions__user="John")

答案 1 :(得分:0)

您可以使用外键的反方向直接执行此操作。如果您尚未设置reverse_name,我认为这应该是

pages = Page.objects.filter(user='John').filter(subscriptions_set=None)