Django: возвращает набор запросов, который имеет неперекрывающиеся значения в 2 моделях

#django #django-queryset

#django #django-queryset

Вопрос:

У меня есть 2 модели:

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

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

Таким образом, поле страницы в модели Subs является моделью FK для страниц. Я пытаюсь вернуть набор запросов, который будет отображать все страницы, принадлежащие Джону, у которого нет подписки, принадлежащей ему.

Я попробовал что-то вроде:

 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])
  

что работает, но как мне объединить его в 1 запрос?

Ответ №1:

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

Ответ №2:

Вы можете сделать это немного более напрямую, используя обратное направление вашего внешнего ключа. Если вы не установили reverse_name , я думаю, это должно выглядеть так

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