/ / Django: Zurückgeben eines Abfrage-Sets mit nicht überlappenden Werten in 2 Modellen - django, django-queryset

Django: Zurückgeben eines Abfrage-Sets mit nicht überlappenden Werten in 2 Modellen - django, django-queryset

Ich habe 2 Modelle:

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

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

Das Seitenfeld im Subs-Modell ist also ein FK-zu-Pages-Modell. Ich versuche, ein Abfrage-Set zurückzugeben, das alle Seiten anzeigen wird, die zu John gehören tut nicht habe ein Abonnement, das ihm gehört.

Ich habe versucht, etwas wie:

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

Ich denke, ich bin nah dran, aber ich bin mir nicht sicher, wo ich mit dieser Frage falsch liege.

Ich habe etwas gemacht wie:

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

was funktioniert, aber wie kombiniere ich es in 1 Abfrage?

Antworten:

1 für die Antwort № 1
pages = Page.objects.filter(user="John").exclude(subscriptions__user="John")

0 für die Antwort № 2

Sie können dies etwas direkter tun, indem Sie die umgekehrte Richtung Ihres Fremdschlüssels verwenden. Wenn Sie nicht eingestellt haben reverse_nameIch denke, das sollte so aussehen

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